mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-10-01 18:50:16 +03:00
Striped down GLM as much as i could and updated to the lastest version.
Removed some Clang compiler warnings.
This commit is contained in:
+2
-2
@@ -82,7 +82,7 @@ endif
|
||||
|
||||
export AR = $(TOOLCHAINPATH)ar
|
||||
|
||||
ifeq ($(LLVM_BUILD), yes)
|
||||
ifeq ($(CLANG_BUILD), yes)
|
||||
export CC = $(TOOLCHAINPATH)clang
|
||||
export CPP = $(TOOLCHAINPATH)clang++
|
||||
|
||||
@@ -128,7 +128,7 @@ ifeq ($(DEBUGBUILD), yes)
|
||||
DEBUGFLAGS = -g -DDEBUG -DEE_DEBUG -DEE_MEMORY_MANAGER
|
||||
RELEASETYPE = debug
|
||||
else
|
||||
ifeq ($(LLVM_BUILD), yes)
|
||||
ifeq ($(CLANG_BUILD), yes)
|
||||
DEBUGFLAGS = -fno-strict-aliasing -O3 -DNDEBUG -ffast-math
|
||||
else
|
||||
DEBUGFLAGS = -fno-strict-aliasing -O3 -s -DNDEBUG -ffast-math
|
||||
|
||||
@@ -40,7 +40,7 @@ class EE_API cSoundStream : private cThread, private cSound {
|
||||
|
||||
Uint32 PlayingOffset() const;
|
||||
|
||||
void PlayingOffset( Uint32 timeOffset );
|
||||
void PlayingOffset( const Uint32& timeOffset );
|
||||
|
||||
/** Set the stream loop state. This parameter is disabled by default
|
||||
* @param Loop True to play in loop, false to play once
|
||||
|
||||
@@ -55,7 +55,7 @@ class EE_API cTextureFont : public cFont {
|
||||
|
||||
bool LoadFromStream( const Uint32& TexId, cIOStream& IOS, const bool& VerticalDraw );
|
||||
private:
|
||||
eeUint mBase, mStartChar, mTexColumns, mTexRows, mSpacing, mNumChars;
|
||||
eeUint mStartChar, mTexColumns, mTexRows, mSpacing, mNumChars;
|
||||
eeFloat mtX, mtY, mFWidth, mFHeight;
|
||||
bool mLoadedCoords;
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
#include <X11/Xmd.h>
|
||||
#include <GL/glew.h>
|
||||
#include "glew.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
||||
@@ -1,49 +1,67 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-07-24
|
||||
// Updated : 2008-08-31
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/_detail.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/_detail.hpp
|
||||
/// @date 2008-07-24 / 2011-06-14
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_detail
|
||||
#define glm_core_detail
|
||||
|
||||
#include "setup.hpp"
|
||||
#include <cassert>
|
||||
#if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
|
||||
#include <cstdint>
|
||||
#endif
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
class thalf;
|
||||
class half;
|
||||
|
||||
#if(GLM_COMPILER & GLM_COMPILER_VC)
|
||||
#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)
|
||||
typedef signed __int64 sint64;
|
||||
typedef unsigned __int64 uint64;
|
||||
#elif(GLM_COMPILER & GLM_COMPILER_GCC)
|
||||
#elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC | GLM_COMPILER_CLANG))
|
||||
__extension__ typedef signed long long sint64;
|
||||
__extension__ typedef unsigned long long uint64;
|
||||
//# if GLM_MODEL == GLM_MODEL_64
|
||||
// typedef signed long highp_int_t;
|
||||
// typedef unsigned long highp_uint_t;
|
||||
//# elif GLM_MODEL == GLM_MODEL_32
|
||||
// __extension__ typedef signed long long highp_int_t;
|
||||
// __extension__ typedef unsigned long long highp_uint_t;
|
||||
//# endif//GLM_MODEL
|
||||
#elif(GLM_COMPILER & GLM_COMPILER_BC)
|
||||
typedef Int64 sint64;
|
||||
typedef Uint64 uint64;
|
||||
#else//unknown compiler
|
||||
typedef signed long sint64;
|
||||
typedef unsigned long uint64;
|
||||
typedef signed long long sint64;
|
||||
typedef unsigned long long uint64;
|
||||
#endif//GLM_COMPILER
|
||||
|
||||
template<bool C>
|
||||
struct If
|
||||
{
|
||||
template<typename F, typename T>
|
||||
static inline T apply(F functor, const T& val)
|
||||
static GLM_FUNC_QUALIFIER T apply(F functor, const T& val)
|
||||
{
|
||||
return functor(val);
|
||||
}
|
||||
@@ -53,7 +71,7 @@ namespace detail
|
||||
struct If<false>
|
||||
{
|
||||
template<typename F, typename T>
|
||||
static inline T apply(F, const T& val)
|
||||
static GLM_FUNC_QUALIFIER T apply(F, const T& val)
|
||||
{
|
||||
return val;
|
||||
}
|
||||
@@ -114,15 +132,15 @@ namespace detail
|
||||
|
||||
union uif32
|
||||
{
|
||||
uif32() :
|
||||
GLM_FUNC_QUALIFIER uif32() :
|
||||
i(0)
|
||||
{}
|
||||
|
||||
uif32(float f) :
|
||||
GLM_FUNC_QUALIFIER uif32(float f) :
|
||||
f(f)
|
||||
{}
|
||||
|
||||
uif32(unsigned int i) :
|
||||
GLM_FUNC_QUALIFIER uif32(unsigned int i) :
|
||||
i(i)
|
||||
{}
|
||||
|
||||
@@ -132,15 +150,15 @@ namespace detail
|
||||
|
||||
union uif64
|
||||
{
|
||||
uif64() :
|
||||
GLM_FUNC_QUALIFIER uif64() :
|
||||
i(0)
|
||||
{}
|
||||
|
||||
uif64(double f) :
|
||||
GLM_FUNC_QUALIFIER uif64(double f) :
|
||||
f(f)
|
||||
{}
|
||||
|
||||
uif64(uint64 i) :
|
||||
GLM_FUNC_QUALIFIER uif64(uint64 i) :
|
||||
i(i)
|
||||
{}
|
||||
|
||||
@@ -224,6 +242,11 @@ namespace detail
|
||||
}; \
|
||||
}
|
||||
|
||||
GLM_DETAIL_IS_FLOAT(detail::half);
|
||||
GLM_DETAIL_IS_FLOAT(float);
|
||||
GLM_DETAIL_IS_FLOAT(double);
|
||||
GLM_DETAIL_IS_FLOAT(long double);
|
||||
|
||||
//////////////////
|
||||
// bool
|
||||
|
||||
@@ -309,23 +332,108 @@ namespace detail
|
||||
is_bool = is_bool<T>::_YES
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
//////////////////
|
||||
// type
|
||||
|
||||
|
||||
typedef signed char int8;
|
||||
typedef signed short int16;
|
||||
typedef signed int int32;
|
||||
typedef detail::sint64 int64;
|
||||
|
||||
|
||||
typedef unsigned char uint8;
|
||||
typedef unsigned short uint16;
|
||||
typedef unsigned int uint32;
|
||||
typedef detail::uint64 uint64;
|
||||
|
||||
typedef detail::thalf float16;
|
||||
|
||||
typedef detail::half float16;
|
||||
typedef float float32;
|
||||
typedef double float64;
|
||||
|
||||
//////////////////
|
||||
// float_or_int_trait
|
||||
|
||||
struct float_or_int_value
|
||||
{
|
||||
enum
|
||||
{
|
||||
GLM_ERROR,
|
||||
GLM_FLOAT,
|
||||
GLM_INT
|
||||
};
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct float_or_int_trait
|
||||
{
|
||||
enum{ID = float_or_int_value::GLM_ERROR};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct float_or_int_trait<int8>
|
||||
{
|
||||
enum{ID = float_or_int_value::GLM_INT};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct float_or_int_trait<int16>
|
||||
{
|
||||
enum{ID = float_or_int_value::GLM_INT};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct float_or_int_trait<int32>
|
||||
{
|
||||
enum{ID = float_or_int_value::GLM_INT};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct float_or_int_trait<int64>
|
||||
{
|
||||
enum{ID = float_or_int_value::GLM_INT};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct float_or_int_trait<uint8>
|
||||
{
|
||||
enum{ID = float_or_int_value::GLM_INT};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct float_or_int_trait<uint16>
|
||||
{
|
||||
enum{ID = float_or_int_value::GLM_INT};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct float_or_int_trait<uint32>
|
||||
{
|
||||
enum{ID = float_or_int_value::GLM_INT};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct float_or_int_trait<uint64>
|
||||
{
|
||||
enum{ID = float_or_int_value::GLM_INT};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct float_or_int_trait<float16>
|
||||
{
|
||||
enum{ID = float_or_int_value::GLM_FLOAT};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct float_or_int_trait<float32>
|
||||
{
|
||||
enum{ID = float_or_int_value::GLM_FLOAT};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct float_or_int_trait<float64>
|
||||
{
|
||||
enum{ID = float_or_int_value::GLM_FLOAT};
|
||||
};
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
@@ -336,7 +444,8 @@ namespace detail
|
||||
# define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct
|
||||
# define GLM_RESTRICT __declspec(restrict)
|
||||
# define GLM_RESTRICT_VAR __restrict
|
||||
#elif((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC31))
|
||||
# define GLM_CONSTEXPR
|
||||
#elif((GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC)) && (GLM_COMPILER >= GLM_COMPILER_GCC31))
|
||||
# define GLM_DEPRECATED __attribute__((__deprecated__))
|
||||
# define GLM_ALIGN(x) __attribute__((aligned(x)))
|
||||
# define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x)))
|
||||
@@ -349,12 +458,18 @@ namespace detail
|
||||
# endif
|
||||
# define GLM_RESTRICT __restrict__
|
||||
# define GLM_RESTRICT_VAR __restrict__
|
||||
# if((GLM_COMPILER >= GLM_COMPILER_GCC47) && ((GLM_LANG & GLM_LANG_CXX0X) == GLM_LANG_CXX0X))
|
||||
# define GLM_CONSTEXPR constexpr
|
||||
# else
|
||||
# define GLM_CONSTEXPR
|
||||
# endif
|
||||
#else
|
||||
# define GLM_DEPRECATED
|
||||
# define GLM_ALIGN
|
||||
# define GLM_ALIGNED_STRUCT(x)
|
||||
# define GLM_RESTRICT
|
||||
# define GLM_RESTRICT_VAR
|
||||
# define GLM_CONSTEXPR
|
||||
#endif//GLM_COMPILER
|
||||
|
||||
#endif//glm_core_detail
|
||||
|
||||
@@ -1,11 +1,32 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-02-21
|
||||
// Updated : 2011-02-21
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/_fixes.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/_fixes.hpp
|
||||
/// @date 2011-02-21 / 2011-11-22
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <cmath>
|
||||
|
||||
//! Workaround for compatibility with other libraries
|
||||
#ifdef max
|
||||
@@ -16,3 +37,19 @@
|
||||
#ifdef min
|
||||
#undef min
|
||||
#endif
|
||||
|
||||
//! Workaround for Android
|
||||
#ifdef isnan
|
||||
#undef isnan
|
||||
#endif
|
||||
|
||||
//! Workaround for Android
|
||||
#ifdef isinf
|
||||
#undef isinf
|
||||
#endif
|
||||
|
||||
//! Workaround for Chrone Native Client
|
||||
#ifdef log2
|
||||
#undef log2
|
||||
#endif
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,20 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-04-27
|
||||
// Updated : 2006-04-27
|
||||
// Licence : This source is under MIT License
|
||||
// File : _swizzle.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __swizzle_inl__
|
||||
#define __swizzle_inl__
|
||||
|
||||
#include "./_swizzle.h"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#endif//__swizzle_inl__
|
||||
@@ -1,20 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-01-19
|
||||
// Updated : 2011-01-19
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/setup.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// GLM is a header only library. There is nothing to compile.
|
||||
// dummy.cpp exist only a wordaround for CMake file.
|
||||
|
||||
#include "../glm.hpp"
|
||||
#include "../ext.hpp"
|
||||
|
||||
//#error "GLM is a header only library"
|
||||
|
||||
int main()
|
||||
{
|
||||
|
||||
}
|
||||
@@ -1,107 +1,173 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-03-08
|
||||
// Updated : 2010-01-26
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_common.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/func_common.hpp
|
||||
/// @date 2008-03-08 / 2010-01-26
|
||||
/// @author Christophe Riccio
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
///
|
||||
/// @defgroup core_func_common Common functions
|
||||
/// @ingroup core
|
||||
///
|
||||
/// These all operate component-wise. The description is per component.
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_common
|
||||
#define glm_core_func_common
|
||||
#ifndef GLM_CORE_func_common
|
||||
#define GLM_CORE_func_common GLM_VERSION
|
||||
|
||||
#include "_fixes.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_common();
|
||||
}//namespace test
|
||||
/// @addtogroup core_func_common
|
||||
/// @{
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define common functions from Section 8.3 of GLSL 1.30.8 specification. Included in glm namespace.
|
||||
namespace common{
|
||||
/// Returns x if x >= 0; otherwise, it returns -x.
|
||||
///
|
||||
/// @tparam genType floating-point or signed integer; scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml">GLSL abs man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType abs(genType const & x);
|
||||
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
/// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.
|
||||
///
|
||||
/// @tparam genType Floating-point or signed integer; scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml">GLSL sign man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType sign(genType const & x);
|
||||
|
||||
//! Returns x if x >= 0; otherwise, it returns -x.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
template <typename genFIType>
|
||||
genFIType abs(genFIType const & x);
|
||||
|
||||
//! Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
template <typename genFIType>
|
||||
genFIType sign(genFIType const & x);
|
||||
|
||||
//! Returns a value equal to the nearest integer that is less then or equal to x.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
/// Returns a value equal to the nearest integer that is less then or equal to x.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml">GLSL floor man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType floor(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.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
/// Returns a value equal to the nearest integer to x
|
||||
/// whose absolute value is not larger than the absolute value of x.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml">GLSL trunc man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType trunc(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.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
/// 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.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType round(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.)
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
/// 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.)
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/roundEven.xml">GLSL roundEven man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
/// @see <a href="http://developer.amd.com/documentation/articles/pages/New-Round-to-Even-Technique.aspx">New round to even technique</a>
|
||||
template <typename genType>
|
||||
genType roundEven(genType const & x);
|
||||
|
||||
//! Returns a value equal to the nearest integer
|
||||
//! that is greater than or equal to x.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
template <typename genType>
|
||||
/// Returns a value equal to the nearest integer
|
||||
/// that is greater than or equal to x.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml">GLSL ceil man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType ceil(genType const & x);
|
||||
|
||||
//! Return x - floor(x).
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
template <typename genType>
|
||||
/// Return x - floor(x).
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml">GLSL fract man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType fract(genType const & x);
|
||||
|
||||
//! Modulus. Returns x - y * floor(x / y)
|
||||
//! for each component in x using the floating point value y.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
template <typename genType>
|
||||
/// Modulus. Returns x - y * floor(x / y)
|
||||
/// for each component in x using the floating point value y.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType 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.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
template <typename genType>
|
||||
/// Modulus. Returns x - y * floor(x / y)
|
||||
/// for each component in x using the floating point value y.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType mod(
|
||||
genType const & x,
|
||||
typename genType::value_type const & y);
|
||||
|
||||
//! 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.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
/// 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.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/modf.xml">GLSL modf man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType modf(
|
||||
genType const & x,
|
||||
genType & i);
|
||||
|
||||
//! Returns y if y < x; otherwise, it returns x.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
/// Returns y if y < x; otherwise, it returns x.
|
||||
///
|
||||
/// @tparam genType Floating-point or integer; scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml">GLSL min man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType min(
|
||||
genType const & x,
|
||||
@@ -112,8 +178,12 @@ namespace glm
|
||||
genType const & x,
|
||||
typename genType::value_type const & y);
|
||||
|
||||
//! Returns y if x < y; otherwise, it returns x.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
/// Returns y if x < y; otherwise, it returns x.
|
||||
///
|
||||
/// @tparam genType Floating-point or integer; scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml">GLSL max man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType max(
|
||||
genType const & x,
|
||||
@@ -124,9 +194,13 @@ namespace glm
|
||||
genType const & x,
|
||||
typename genType::value_type const & y);
|
||||
|
||||
//! Returns min(max(x, minVal), maxVal) for each component in x
|
||||
//! using the floating-point values minVal and maxVal.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
/// Returns min(max(x, minVal), maxVal) for each component in x
|
||||
/// using the floating-point values minVal and maxVal.
|
||||
///
|
||||
/// @tparam genType Floating-point or integer; scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml">GLSL clamp man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType clamp(
|
||||
genType const & x,
|
||||
@@ -139,12 +213,12 @@ namespace glm
|
||||
typename genType::value_type const & minVal,
|
||||
typename genType::value_type const & maxVal);
|
||||
|
||||
//! \return If genTypeU is a floating scalar or vector:
|
||||
//! @return 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].
|
||||
//!
|
||||
//! \return If genTypeU is a boolean scalar or vector:
|
||||
//!
|
||||
//! @return If genTypeU is a boolean scalar or vector:
|
||||
//! Selects which vector each returned component comes
|
||||
//! from. For a component of a that is false, the
|
||||
//! corresponding component of x is returned. For a
|
||||
@@ -155,19 +229,39 @@ namespace glm
|
||||
//! provides different functionality than
|
||||
//! genType mix(genType x, genType y, genType(a))
|
||||
//! where a is a Boolean vector.
|
||||
//!
|
||||
//! From GLSL 1.30.08 specification, section 8.3
|
||||
//!
|
||||
//! \param[in] x Floating point scalar or vector.
|
||||
//! \param[in] y Floating point scalar or vector.
|
||||
//! \param[in] a Floating point or boolean scalar or vector.
|
||||
//!
|
||||
// \todo Test when 'a' is a boolean.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mix.xml">GLSL mix man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
///
|
||||
/// @param[in] x Value to interpolate.
|
||||
/// @param[in] y Value to interpolate.
|
||||
/// @param[in] a Interpolant.
|
||||
///
|
||||
/// @tparam genTypeT Floating point scalar or vector.
|
||||
/// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.
|
||||
///
|
||||
/// @code
|
||||
/// #include <glm/glm.hpp>
|
||||
/// ...
|
||||
/// float a;
|
||||
/// bool b;
|
||||
/// glm::dvec3 e;
|
||||
/// glm::dvec3 f;
|
||||
/// glm::vec4 g;
|
||||
/// glm::vec4 h;
|
||||
/// ...
|
||||
/// 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.
|
||||
/// @endcode
|
||||
template <typename genTypeT, typename genTypeU>
|
||||
genTypeT mix(genTypeT const & x, genTypeT const & y, genTypeU const & a);
|
||||
|
||||
//! Returns 0.0 if x < edge, otherwise it returns 1.0.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
//!
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType step(
|
||||
genType const & edge,
|
||||
@@ -178,16 +272,20 @@ namespace glm
|
||||
typename genType::value_type const & edge,
|
||||
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.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
/// 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.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/smoothstep.xml">GLSL smoothstep man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType smoothstep(
|
||||
genType const & edge0,
|
||||
@@ -200,82 +298,133 @@ namespace glm
|
||||
typename genType::value_type const & edge1,
|
||||
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.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
/// 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.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml">GLSL isnan man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
typename genType::bool_type isnan(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.
|
||||
//! (From GLSL 1.30.08 specification, section 8.3)
|
||||
/// 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.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml">GLSL isinf man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
typename genType::bool_type isinf(genType const & x);
|
||||
|
||||
//! Returns a signed or unsigned integer value representing
|
||||
//! the encoding of a floating-point value. The floatingpoint
|
||||
//! value's bit-level representation is preserved.
|
||||
//! (From GLSL 4.00.08 specification, section 8.3)
|
||||
/// Returns a signed integer value representing
|
||||
/// the encoding of a floating-point value. The floatingpoint
|
||||
/// value's bit-level representation is preserved.
|
||||
///
|
||||
/// @tparam genType Single-precision floating-point scalar or vector types.
|
||||
/// @tparam genIType Signed integer scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType, typename genIType>
|
||||
genIType floatBitsToInt(genType const & value);
|
||||
|
||||
//! Returns a signed or unsigned integer value representing
|
||||
//! the encoding of a floating-point value. The floatingpoint
|
||||
//! value's bit-level representation is preserved.
|
||||
//! (From GLSL 4.00.08 specification, section 8.3)
|
||||
/// Returns a unsigned integer value representing
|
||||
/// the encoding of a floating-point value. The floatingpoint
|
||||
/// value's bit-level representation is preserved.
|
||||
///
|
||||
/// @tparam genType Single-precision floating-point scalar or vector types.
|
||||
/// @tparam genUType Unsigned integer scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType, typename genUType>
|
||||
genUType floatBitsToInt(genType const & value);
|
||||
genUType floatBitsToUint(genType const & value);
|
||||
|
||||
//! Returns a floating-point value corresponding to a signed
|
||||
//! or 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.
|
||||
//! (From GLSL 4.00.08 specification, section 8.3)
|
||||
template <typename genType, typename genIUType>
|
||||
genType intBitsToFloat(genIUType const & value);
|
||||
/// 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.
|
||||
///
|
||||
/// @tparam genType Single-precision floating-point scalar or vector types.
|
||||
/// @tparam genIType Signed integer scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
///
|
||||
/// @todo Clarify this declaration, we don't need to actually specify the return type
|
||||
template <typename genType, typename genIType>
|
||||
genType intBitsToFloat(genIType const & value);
|
||||
|
||||
//! Computes and returns a * b + c.
|
||||
//! (From GLSL 4.00.08 specification, section 8.3)
|
||||
/// 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.
|
||||
///
|
||||
/// @tparam genType Single-precision floating-point scalar or vector types.
|
||||
/// @tparam genUType Unsigned integer scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
///
|
||||
/// @todo Clarify this declaration, we don't need to actually specify the return type
|
||||
template <typename genType, typename genUType>
|
||||
genType uintBitsToFloat(genUType const & value);
|
||||
|
||||
/// Computes and returns a * b + c.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml">GLSL fma man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType>
|
||||
genType fma(genType const & a, genType const & b, genType const & c);
|
||||
|
||||
//! 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.
|
||||
//! (From GLSL 4.00.08 specification, section 8.3)
|
||||
/// 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.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml">GLSL frexp man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType, typename genIType>
|
||||
genType frexp(genType const & x, genIType & 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.
|
||||
//! (From GLSL 4.00.08 specification, section 8.3)
|
||||
/// 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.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml">GLSL ldexp man page</a>;
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||
template <typename genType, typename genIType>
|
||||
genType ldexp(genType const & x, genIType const & exp);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace common
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::common;
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#include "func_common.inl"
|
||||
|
||||
#endif//glm_core_func_common
|
||||
#endif//GLM_CORE_func_common
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,74 +1,121 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-08
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_exponential.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/func_exponential.hpp
|
||||
/// @date 2008-08-08 / 2011-06-14
|
||||
/// @author Christophe Riccio
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||
///
|
||||
/// @defgroup core_func_exponential Exponential functions
|
||||
/// @ingroup core
|
||||
///
|
||||
/// These all operate component-wise. The description is per component.
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_exponential
|
||||
#define glm_core_func_exponential
|
||||
#define glm_core_func_exponential GLM_VERSION
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_exponential();
|
||||
}//namespace test
|
||||
/// @addtogroup core_func_exponential
|
||||
/// @{
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define all exponential functions from Section 8.2 of GLSL 1.30.8 specification. Included in glm namespace.
|
||||
namespace exponential{
|
||||
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! Returns x raised to the y power.
|
||||
//! (From GLSL 1.30.08 specification, section 8.2)
|
||||
/// Returns x raised to the y power.
|
||||
///
|
||||
/// @param x pow function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision.
|
||||
/// @param y
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/pow.xml">GLSL pow man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||
template <typename genType>
|
||||
genType pow(genType const & x, genType const & y);
|
||||
|
||||
//! Returns the natural exponentiation of x, i.e., e^x.
|
||||
//! (From GLSL 1.30.08 specification, section 8.2)
|
||||
/// 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.
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/exp.xml">GLSL exp man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||
template <typename genType>
|
||||
genType exp(genType const & x);
|
||||
|
||||
//! 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.
|
||||
//! (From GLSL 1.30.08 specification, section 8.2)
|
||||
/// 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.
|
||||
///
|
||||
/// @param x log function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision.
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/log.xml">GLSL log man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||
template <typename genType>
|
||||
genType log(genType const & x);
|
||||
|
||||
//! Returns 2 raised to the x power.
|
||||
//! (From GLSL 1.30.08 specification, section 8.2)
|
||||
/// Returns 2 raised to the x 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.
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/exp2.xml">GLSL exp2 man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||
template <typename genType>
|
||||
genType exp2(genType const & x);
|
||||
|
||||
//! Returns the base 2 log of x, i.e., returns the value y,
|
||||
//! which satisfies the equation x = 2 ^ y.
|
||||
//! (From GLSL 1.30.08 specification, section 8.2)
|
||||
/// 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.
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/log2.xml">GLSL log2 man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||
template <typename genType>
|
||||
genType log2(genType const & x);
|
||||
|
||||
//! Returns the positive square root of x.
|
||||
//! (From GLSL 1.30.08 specification, section 8.2)
|
||||
/// Returns the positive square root of x.
|
||||
///
|
||||
/// @param x sqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision.
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sqrt.xml">GLSL sqrt man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||
template <typename genType>
|
||||
genType sqrt(genType const & x);
|
||||
|
||||
//! Returns the reciprocal of the positive square root of x.
|
||||
//! (From GLSL 1.30.08 specification, section 8.2)
|
||||
/// Returns the reciprocal of the positive square root of x.
|
||||
///
|
||||
/// @param x inversesqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision.
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inversesqrt.xml">GLSL inversesqrt man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||
template <typename genType>
|
||||
genType inversesqrt(genType const & x);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace exponential
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::exponential;
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#include "func_exponential.inl"
|
||||
|
||||
@@ -1,358 +1,155 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-03
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_exponential.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.
|
||||
///
|
||||
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
/// LIABILITY, WHETHER IN AN ACTION 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/core/func_exponential.inl
|
||||
/// @date 2008-08-03 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace exponential{
|
||||
|
||||
// pow
|
||||
template <typename genType>
|
||||
inline genType pow
|
||||
// pow
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType pow
|
||||
(
|
||||
genType const & x,
|
||||
genType const & y
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'pow' only accept floating-point input");
|
||||
|
||||
return ::std::pow(x, y);
|
||||
}
|
||||
return ::std::pow(x, y);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> pow
|
||||
(
|
||||
detail::tvec2<T> const & x,
|
||||
detail::tvec2<T> const & y
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
pow(x.x, y.x),
|
||||
pow(x.y, y.y));
|
||||
}
|
||||
VECTORIZE_VEC_VEC(pow)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> pow
|
||||
(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
pow(x.x, y.x),
|
||||
pow(x.y, y.y),
|
||||
pow(x.z, y.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> pow
|
||||
(
|
||||
detail::tvec4<T> const & x,
|
||||
detail::tvec4<T> const & y
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
pow(x.x, y.x),
|
||||
pow(x.y, y.y),
|
||||
pow(x.z, y.z),
|
||||
pow(x.w, y.w));
|
||||
}
|
||||
|
||||
// exp
|
||||
template <typename genType>
|
||||
inline genType exp
|
||||
// exp
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType exp
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'exp' only accept floating-point input");
|
||||
|
||||
return ::std::exp(x);
|
||||
}
|
||||
return ::std::exp(x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> exp
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
exp(x.x),
|
||||
exp(x.y));
|
||||
}
|
||||
VECTORIZE_VEC(exp)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> exp
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
exp(x.x),
|
||||
exp(x.y),
|
||||
exp(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> exp
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
exp(x.x),
|
||||
exp(x.y),
|
||||
exp(x.z),
|
||||
exp(x.w));
|
||||
}
|
||||
|
||||
// log
|
||||
template <typename genType>
|
||||
inline genType log
|
||||
// log
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType log
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'log' only accept floating-point input");
|
||||
|
||||
return ::std::log(x);
|
||||
}
|
||||
return ::std::log(x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> log
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
log(x.x),
|
||||
log(x.y));
|
||||
}
|
||||
VECTORIZE_VEC(log)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> log
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
log(x.x),
|
||||
log(x.y),
|
||||
log(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> log
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
log(x.x),
|
||||
log(x.y),
|
||||
log(x.z),
|
||||
log(x.w));
|
||||
}
|
||||
|
||||
//exp2, ln2 = 0.69314718055994530941723212145818f
|
||||
template <typename genType>
|
||||
inline genType exp2
|
||||
//exp2, ln2 = 0.69314718055994530941723212145818f
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType exp2
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'exp2' only accept floating-point input");
|
||||
|
||||
return ::std::exp(genType(0.69314718055994530941723212145818) * x);
|
||||
}
|
||||
return ::std::exp(genType(0.69314718055994530941723212145818) * x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> exp2
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
exp2(x.x),
|
||||
exp2(x.y));
|
||||
}
|
||||
VECTORIZE_VEC(exp2)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> exp2
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
exp2(x.x),
|
||||
exp2(x.y),
|
||||
exp2(x.z));
|
||||
}
|
||||
namespace _detail
|
||||
{
|
||||
template <int _PATH = detail::float_or_int_value::GLM_ERROR>
|
||||
struct _compute_log2
|
||||
{
|
||||
template <typename T>
|
||||
T operator() (T const & Value) const;
|
||||
/*
|
||||
{
|
||||
GLM_STATIC_ASSERT(0, "'log2' parameter has an invalid template parameter type. GLM core features only supports floating-point types, include <glm/gtx/integer.hpp> for integer types support. Others types are not supported.");
|
||||
return Value;
|
||||
}
|
||||
*/
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> exp2
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
exp2(x.x),
|
||||
exp2(x.y),
|
||||
exp2(x.z),
|
||||
exp2(x.w));
|
||||
}
|
||||
template <>
|
||||
struct _compute_log2<detail::float_or_int_value::GLM_FLOAT>
|
||||
{
|
||||
template <typename T>
|
||||
T operator() (T const & Value) const
|
||||
{
|
||||
return T(::std::log(Value)) / T(0.69314718055994530941723212145818);
|
||||
}
|
||||
};
|
||||
|
||||
// log2, ln2 = 0.69314718055994530941723212145818f
|
||||
template <typename genType>
|
||||
inline genType log2
|
||||
}//namespace _detail
|
||||
|
||||
// log2, ln2 = 0.69314718055994530941723212145818f
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType log2
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'log2' only accept floating-point input");
|
||||
{
|
||||
assert(x > genType(0)); // log2 is only defined on the range (0, inf]
|
||||
return _detail::_compute_log2<detail::float_or_int_trait<genType>::ID>()(x);
|
||||
}
|
||||
|
||||
return ::std::log(x) / genType(0.69314718055994530941723212145818);
|
||||
}
|
||||
VECTORIZE_VEC(log2)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> log2
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
log2(x.x),
|
||||
log2(x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> log2
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
log2(x.x),
|
||||
log2(x.y),
|
||||
log2(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> log2
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
log2(x.x),
|
||||
log2(x.y),
|
||||
log2(x.z),
|
||||
log2(x.w));
|
||||
}
|
||||
|
||||
// sqrt
|
||||
template <typename genType>
|
||||
inline genType sqrt
|
||||
// sqrt
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType sqrt
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'sqrt' only accept floating-point input");
|
||||
|
||||
return genType(::std::sqrt(x));
|
||||
}
|
||||
return genType(::std::sqrt(x));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> sqrt
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
sqrt(x.x),
|
||||
sqrt(x.y));
|
||||
}
|
||||
VECTORIZE_VEC(sqrt)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> sqrt
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
sqrt(x.x),
|
||||
sqrt(x.y),
|
||||
sqrt(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> sqrt
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
sqrt(x.x),
|
||||
sqrt(x.y),
|
||||
sqrt(x.z),
|
||||
sqrt(x.w));
|
||||
}
|
||||
|
||||
template <typename genType>
|
||||
inline genType inversesqrt
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType inversesqrt
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'inversesqrt' only accept floating-point input");
|
||||
|
||||
return genType(1) / ::std::sqrt(x);
|
||||
}
|
||||
return genType(1) / ::std::sqrt(x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> inversesqrt
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
inversesqrt(x.x),
|
||||
inversesqrt(x.y));
|
||||
}
|
||||
VECTORIZE_VEC(inversesqrt)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> inversesqrt
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
inversesqrt(x.x),
|
||||
inversesqrt(x.y),
|
||||
inversesqrt(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> inversesqrt
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
inversesqrt(x.x),
|
||||
inversesqrt(x.y),
|
||||
inversesqrt(x.z),
|
||||
inversesqrt(x.w));
|
||||
}
|
||||
|
||||
}//namespace exponential
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
||||
|
||||
@@ -1,95 +1,136 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-03
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_geometric.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/func_geometric.hpp
|
||||
/// @date 2008-08-03 / 2011-06-14
|
||||
/// @author Christophe Riccio
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||
///
|
||||
/// @defgroup core_func_geometric Geometric functions
|
||||
/// @ingroup core
|
||||
///
|
||||
/// These operate on vectors as vectors, not component-wise.
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_geometric
|
||||
#define glm_core_func_geometric
|
||||
#define glm_core_func_geometric GLM_VERSION
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_geometric();
|
||||
}//namespace test
|
||||
/// @addtogroup core_func_geometric
|
||||
/// @{
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define all geometric functions from Section 8.4 of GLSL 1.30.8 specification. Included in glm namespace.
|
||||
namespace geometric{
|
||||
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! Returns the length of x, i.e., sqrt(x * x).
|
||||
//! (From GLSL 1.30.08 specification, section 8.4)
|
||||
/// Returns the length of x, i.e., sqrt(x * x).
|
||||
///
|
||||
/// @tparam genType Floating-point vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/length.xml">GLSL length man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||
template <typename genType>
|
||||
typename genType::value_type length(
|
||||
typename genType::value_type length(
|
||||
genType const & x);
|
||||
|
||||
//! Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
|
||||
//! (From GLSL 1.30.08 specification, section 8.4)
|
||||
/// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
|
||||
///
|
||||
/// @tparam genType Floating-point vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/distance.xml">GLSL distance man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||
template <typename genType>
|
||||
typename genType::value_type distance(
|
||||
genType const & p0,
|
||||
genType const & p1);
|
||||
|
||||
//! Returns the dot product of x and y, i.e., result = x * y.
|
||||
//! (From GLSL 1.30.08 specification, section 8.4)
|
||||
template <typename genType>
|
||||
/// Returns the dot product of x and y, i.e., result = x * y.
|
||||
///
|
||||
/// @tparam genType Floating-point vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/dot.xml">GLSL dot man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||
template <typename genType>
|
||||
typename genType::value_type dot(
|
||||
genType const & x,
|
||||
genType const & y);
|
||||
|
||||
//! Returns the cross product of x and y.
|
||||
//! (From GLSL 1.30.08 specification, section 8.4)
|
||||
template <typename T>
|
||||
detail::tvec3<T> cross(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y);
|
||||
/// Returns the cross product of x and y.
|
||||
///
|
||||
/// @tparam valType Floating-point scalar types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cross.xml">GLSL cross man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||
template <typename valType>
|
||||
detail::tvec3<valType> cross(
|
||||
detail::tvec3<valType> const & x,
|
||||
detail::tvec3<valType> const & y);
|
||||
|
||||
//! Returns a vector in the same direction as x but with length of 1.
|
||||
//! (From GLSL 1.30.08 specification, section 8.4)
|
||||
/// Returns a vector in the same direction as x but with length of 1.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml">GLSL normalize man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||
template <typename genType>
|
||||
genType normalize(
|
||||
genType const & x);
|
||||
|
||||
//! If dot(Nref, I) < 0.0, return N, otherwise, return -N.
|
||||
//! (From GLSL 1.30.08 specification, section 8.4)
|
||||
template <typename genType>
|
||||
/// If dot(Nref, I) < 0.0, return N, otherwise, return -N.
|
||||
///
|
||||
/// @tparam genType Floating-point vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/faceforward.xml">GLSL faceforward man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||
template <typename genType>
|
||||
genType faceforward(
|
||||
genType const & N,
|
||||
genType const & I,
|
||||
genType const & Nref);
|
||||
|
||||
//! For the incident vector I and surface orientation N,
|
||||
//! returns the reflection direction : result = I - 2.0 * dot(N, I) * N.
|
||||
//! (From GLSL 1.30.08 specification, section 8.4)
|
||||
template <typename genType>
|
||||
|
||||
/// For the incident vector I and surface orientation N,
|
||||
/// returns the reflection direction : result = I - 2.0 * dot(N, I) * N.
|
||||
///
|
||||
/// @tparam genType Floating-point vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/reflect.xml">GLSL reflect man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||
template <typename genType>
|
||||
genType reflect(
|
||||
genType const & I,
|
||||
genType const & N);
|
||||
|
||||
//! For the incident vector I and surface normal N,
|
||||
//! and the ratio of indices of refraction eta,
|
||||
//! return the refraction vector.
|
||||
//! (From GLSL 1.30.08 specification, section 8.4)
|
||||
template <typename genType>
|
||||
|
||||
/// For the incident vector I and surface normal N,
|
||||
/// and the ratio of indices of refraction eta,
|
||||
/// return the refraction vector.
|
||||
///
|
||||
/// @tparam genType Floating-point vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/refract.xml">GLSL refract man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||
template <typename genType>
|
||||
genType refract(
|
||||
genType const & I,
|
||||
genType const & N,
|
||||
typename genType::value_type const & eta);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace geometric
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::geometric;
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#include "func_geometric.inl"
|
||||
|
||||
@@ -1,122 +1,138 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-03
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_geometric.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.
|
||||
///
|
||||
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
/// LIABILITY, WHETHER IN AN ACTION 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/core/func_geometric.inl
|
||||
/// @date 2008-08-03 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace geometric{
|
||||
|
||||
// length
|
||||
template <typename genType>
|
||||
inline genType length
|
||||
// length
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType length
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'length' only accept floating-point inputs");
|
||||
|
||||
genType sqr = x * x;
|
||||
return sqrt(sqr);
|
||||
}
|
||||
genType sqr = x * x;
|
||||
return sqrt(sqr);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename detail::tvec2<T>::value_type length
|
||||
GLM_FUNC_QUALIFIER typename detail::tvec2<T>::value_type length
|
||||
(
|
||||
detail::tvec2<T> const & v
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'length' only accept floating-point inputs");
|
||||
|
||||
typename detail::tvec2<T>::value_type sqr = v.x * v.x + v.y * v.y;
|
||||
return sqrt(sqr);
|
||||
}
|
||||
typename detail::tvec2<T>::value_type sqr = v.x * v.x + v.y * v.y;
|
||||
return sqrt(sqr);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename detail::tvec3<T>::value_type length
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tvec3<T>::value_type length
|
||||
(
|
||||
detail::tvec3<T> const & v
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'length' only accept floating-point inputs");
|
||||
|
||||
typename detail::tvec3<T>::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z;
|
||||
return sqrt(sqr);
|
||||
}
|
||||
typename detail::tvec3<T>::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z;
|
||||
return sqrt(sqr);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename detail::tvec4<T>::value_type length
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tvec4<T>::value_type length
|
||||
(
|
||||
detail::tvec4<T> const & v
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'length' only accept floating-point inputs");
|
||||
|
||||
typename detail::tvec4<T>::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w;
|
||||
return sqrt(sqr);
|
||||
}
|
||||
typename detail::tvec4<T>::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w;
|
||||
return sqrt(sqr);
|
||||
}
|
||||
|
||||
// distance
|
||||
// distance
|
||||
template <typename genType>
|
||||
inline genType distance
|
||||
GLM_FUNC_QUALIFIER genType distance
|
||||
(
|
||||
genType const & p0,
|
||||
genType const & p1
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'distance' only accept floating-point inputs");
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'distance' only accept floating-point inputs");
|
||||
|
||||
return length(p1 - p0);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename detail::tvec2<T>::value_type distance
|
||||
GLM_FUNC_QUALIFIER typename detail::tvec2<T>::value_type distance
|
||||
(
|
||||
detail::tvec2<T> const & p0,
|
||||
detail::tvec2<T> const & p1
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'distance' only accept floating-point inputs");
|
||||
|
||||
return length(p1 - p0);
|
||||
}
|
||||
return length(p1 - p0);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename detail::tvec3<T>::value_type distance
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tvec3<T>::value_type distance
|
||||
(
|
||||
detail::tvec3<T> const & p0,
|
||||
detail::tvec3<T> const & p1
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'distance' only accept floating-point inputs");
|
||||
|
||||
return length(p1 - p0);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename detail::tvec4<T>::value_type distance
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tvec4<T>::value_type distance
|
||||
(
|
||||
detail::tvec4<T> const & p0,
|
||||
detail::tvec4<T> const & p1
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'distance' only accept floating-point inputs");
|
||||
|
||||
return length(p1 - p0);
|
||||
}
|
||||
}
|
||||
|
||||
// dot
|
||||
template <typename genType>
|
||||
inline genType dot
|
||||
GLM_FUNC_QUALIFIER genType dot
|
||||
(
|
||||
genType const & x,
|
||||
genType const & y
|
||||
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'dot' only accept floating-point inputs");
|
||||
@@ -124,126 +140,126 @@ namespace glm
|
||||
return x * y;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename detail::tvec2<T>::value_type dot
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tvec2<T>::value_type dot
|
||||
(
|
||||
detail::tvec2<T> const & x,
|
||||
detail::tvec2<T> const & y
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'dot' only accept floating-point inputs");
|
||||
|
||||
return x.x * y.x + x.y * y.y;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline T dot
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER T dot
|
||||
(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'dot' only accept floating-point inputs");
|
||||
|
||||
return x.x * y.x + x.y * y.y + x.z * y.z;
|
||||
}
|
||||
}
|
||||
/* // SSE3
|
||||
inline float dot(const tvec4<float>& x, const tvec4<float>& y)
|
||||
{
|
||||
float Result;
|
||||
__asm
|
||||
{
|
||||
mov esi, x
|
||||
mov edi, y
|
||||
movaps xmm0, [esi]
|
||||
mulps xmm0, [edi]
|
||||
haddps( _xmm0, _xmm0 )
|
||||
haddps( _xmm0, _xmm0 )
|
||||
movss Result, xmm0
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
GLM_FUNC_QUALIFIER float dot(const tvec4<float>& x, const tvec4<float>& y)
|
||||
{
|
||||
float Result;
|
||||
__asm
|
||||
{
|
||||
mov esi, x
|
||||
mov edi, y
|
||||
movaps xmm0, [esi]
|
||||
mulps xmm0, [edi]
|
||||
haddps( _xmm0, _xmm0 )
|
||||
haddps( _xmm0, _xmm0 )
|
||||
movss Result, xmm0
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
*/
|
||||
template <typename T>
|
||||
inline T dot
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER T dot
|
||||
(
|
||||
detail::tvec4<T> const & x,
|
||||
detail::tvec4<T> const & y
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'dot' only accept floating-point inputs");
|
||||
|
||||
return x.x * y.x + x.y * y.y + x.z * y.z + x.w * y.w;
|
||||
}
|
||||
return x.x * y.x + x.y * y.y + x.z * y.z + x.w * y.w;
|
||||
}
|
||||
|
||||
// cross
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> cross
|
||||
// cross
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> cross
|
||||
(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'cross' only accept floating-point inputs");
|
||||
|
||||
return detail::tvec3<T>(
|
||||
x.y * y.z - y.y * x.z,
|
||||
x.z * y.x - y.z * x.x,
|
||||
x.x * y.y - y.x * x.y);
|
||||
}
|
||||
return detail::tvec3<T>(
|
||||
x.y * y.z - y.y * x.z,
|
||||
x.z * y.x - y.z * x.x,
|
||||
x.x * y.y - y.x * x.y);
|
||||
}
|
||||
|
||||
// normalize
|
||||
template <typename genType>
|
||||
inline genType normalize
|
||||
// normalize
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType normalize
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'normalize' only accept floating-point inputs");
|
||||
|
||||
return x < genType(0) ? genType(-1) : genType(1);
|
||||
}
|
||||
return x < genType(0) ? genType(-1) : genType(1);
|
||||
}
|
||||
|
||||
// According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefine and generate an error
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> normalize
|
||||
// According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefine and generate an error
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> normalize
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'normalize' only accept floating-point inputs");
|
||||
|
||||
typename detail::tvec2<T>::value_type sqr = x.x * x.x + x.y * x.y;
|
||||
return x * inversesqrt(sqr);
|
||||
}
|
||||
return x * inversesqrt(sqr);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> normalize
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> normalize
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'normalize' only accept floating-point inputs");
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'normalize' only accept floating-point inputs");
|
||||
|
||||
typename detail::tvec3<T>::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z;
|
||||
return x * inversesqrt(sqr);
|
||||
}
|
||||
return x * inversesqrt(sqr);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> normalize
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> normalize
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'normalize' only accept floating-point inputs");
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'normalize' only accept floating-point inputs");
|
||||
|
||||
typename detail::tvec4<T>::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z + x.w * x.w;
|
||||
return x * inversesqrt(sqr);
|
||||
}
|
||||
return x * inversesqrt(sqr);
|
||||
}
|
||||
|
||||
// faceforward
|
||||
// faceforward
|
||||
template <typename genType>
|
||||
inline genType faceforward
|
||||
GLM_FUNC_QUALIFIER genType faceforward
|
||||
(
|
||||
genType const & N,
|
||||
genType const & I,
|
||||
@@ -261,30 +277,46 @@ namespace glm
|
||||
genType const & N
|
||||
)
|
||||
{
|
||||
return I - N * dot(N, I) * float(2);
|
||||
return I - N * dot(N, I) * genType(2);
|
||||
}
|
||||
|
||||
// refract
|
||||
template <typename genType>
|
||||
inline genType refract
|
||||
// refract
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType refract
|
||||
(
|
||||
genType const & I,
|
||||
genType const & N,
|
||||
genType const & eta
|
||||
)
|
||||
{
|
||||
//It could be a vector
|
||||
//GLM_STATIC_ASSERT(detail::type<genType>::is_float);
|
||||
|
||||
genType dotValue = dot(N, I);
|
||||
genType k = genType(1) - eta * eta * (genType(1) - dotValue * dotValue);
|
||||
if(k < genType(0))
|
||||
return genType(0);
|
||||
else
|
||||
return eta * I - (eta * dotValue + sqrt(k)) * N;
|
||||
}
|
||||
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType refract
|
||||
(
|
||||
genType const & I,
|
||||
genType const & N,
|
||||
typename genType::value_type const & eta
|
||||
)
|
||||
{
|
||||
{
|
||||
//It could be a vector
|
||||
//GLM_STATIC_ASSERT(detail::type<genType>::is_float);
|
||||
|
||||
typename genType::value_type dotValue = dot(N, I);
|
||||
typename genType::value_type k = typename genType::value_type(1) - eta * eta * (typename genType::value_type(1) - dotValue * dotValue);
|
||||
if(k < typename genType::value_type(0))
|
||||
return genType(0);
|
||||
else
|
||||
return eta * I - (eta * dotValue + sqrt(k)) * N;
|
||||
}
|
||||
typename genType::value_type dotValue = dot(N, I);
|
||||
typename genType::value_type k = typename genType::value_type(1) - eta * eta * (typename genType::value_type(1) - dotValue * dotValue);
|
||||
if(k < typename genType::value_type(0))
|
||||
return genType(0);
|
||||
else
|
||||
return eta * I - (eta * dotValue + sqrt(k)) * N;
|
||||
}
|
||||
|
||||
}//namespace geometric
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
||||
|
||||
@@ -1,146 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-03-17
|
||||
// Updated : 2010-03-31
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_integer.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_integer
|
||||
#define glm_core_func_integer
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_integer();
|
||||
}//namespace test
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define integer functions from Section 8.8 of GLSL 4.00.8 specification.
|
||||
namespace integer{
|
||||
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! 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.
|
||||
//!
|
||||
//! (From GLSL 4.00.08 specification, section 8.8)
|
||||
template <typename genUType>
|
||||
genUType uaddCarry(
|
||||
genUType const & x,
|
||||
genUType const & y,
|
||||
genUType & carry);
|
||||
|
||||
//! 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.
|
||||
//!
|
||||
//! (From GLSL 4.00.08 specification, section 8.8)
|
||||
template <typename genUType>
|
||||
genUType usubBorrow(
|
||||
genUType const & x,
|
||||
genUType const & y,
|
||||
genUType & borrow);
|
||||
|
||||
//! 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.
|
||||
//! (From GLSL 4.00.08 specification, section 8.8)
|
||||
template <typename genUType>
|
||||
void umulExtended(
|
||||
genUType const & x,
|
||||
genUType const & y,
|
||||
genUType & msb,
|
||||
genUType & 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.
|
||||
//! (From GLSL 4.00.08 specification, section 8.8)
|
||||
template <typename genIType>
|
||||
void imulExtended(
|
||||
genIType const & x,
|
||||
genIType const & y,
|
||||
genIType & msb,
|
||||
genIType & lsb);
|
||||
|
||||
//! 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.
|
||||
//!
|
||||
//! (From GLSL 4.00.08 specification, section 8.8)
|
||||
template <typename genIUType>
|
||||
genIUType bitfieldExtract(
|
||||
genIUType const & Value,
|
||||
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.
|
||||
//!
|
||||
//! (From GLSL 4.00.08 specification, section 8.8)
|
||||
template <typename genIUType>
|
||||
genIUType bitfieldInsert(
|
||||
genIUType const & Base,
|
||||
genIUType const & Insert,
|
||||
int const & Offset,
|
||||
int const & Bits);
|
||||
|
||||
//! 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.
|
||||
//! (From GLSL 4.00.08 specification, section 8.8)
|
||||
template <typename genIUType>
|
||||
genIUType bitfieldReverse(genIUType const & value);
|
||||
|
||||
//! Returns the number of bits set to 1 in the binary representation of value.
|
||||
//! (From GLSL 4.00.08 specification, section 8.8)
|
||||
template <typename T, template <typename> class C>
|
||||
typename C<T>::signed_type bitCount(C<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.
|
||||
//! (From GLSL 4.00.08 specification, section 8.8)
|
||||
template <typename T, template <typename> class C>
|
||||
typename C<T>::signed_type findLSB(C<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.
|
||||
//! (From GLSL 4.00.08 specification, section 8.8)
|
||||
template <typename T, template <typename> class C>
|
||||
typename C<T>::signed_type findMSB(C<T> const & Value);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace integer
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::integer;
|
||||
}//namespace glm
|
||||
|
||||
#include "func_integer.inl"
|
||||
|
||||
#endif//glm_core_func_integer
|
||||
|
||||
@@ -1,600 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-03-17
|
||||
// Updated : 2010-03-31
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_integer.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
|
||||
}//namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace integer
|
||||
{
|
||||
// uaddCarry
|
||||
template <typename genUType>
|
||||
inline genUType uaddCarry
|
||||
(
|
||||
genUType const & x,
|
||||
genUType const & y,
|
||||
genUType & Carry
|
||||
)
|
||||
{
|
||||
detail::highp_uint_t Value64 = detail::highp_uint_t(x) + detail::highp_uint_t(y);
|
||||
genUType Result = genUType(Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32)));
|
||||
Carry = (Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32))) > 1 ? 1 : 0;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> uaddCarry
|
||||
(
|
||||
detail::tvec2<T> const & x,
|
||||
detail::tvec2<T> const & y,
|
||||
detail::tvec2<T> & Carry
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
uaddCarry(x[0], y[0], Carry[0]),
|
||||
uaddCarry(x[1], y[1], Carry[1]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> uaddCarry
|
||||
(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y,
|
||||
detail::tvec3<T> & Carry
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
uaddCarry(x[0], y[0], Carry[0]),
|
||||
uaddCarry(x[1], y[1], Carry[1]),
|
||||
uaddCarry(x[2], y[2], Carry[2]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> uaddCarry
|
||||
(
|
||||
detail::tvec4<T> const & x,
|
||||
detail::tvec4<T> const & y,
|
||||
detail::tvec4<T> & Carry
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
uaddCarry(x[0], y[0], Carry[0]),
|
||||
uaddCarry(x[1], y[1], Carry[1]),
|
||||
uaddCarry(x[2], y[2], Carry[2]),
|
||||
uaddCarry(x[3], y[3], Carry[3]));
|
||||
}
|
||||
|
||||
// usubBorrow
|
||||
template <typename genUType>
|
||||
inline genUType usubBorrow
|
||||
(
|
||||
genUType const & x,
|
||||
genUType const & y,
|
||||
genUType & Borrow
|
||||
)
|
||||
{
|
||||
Borrow = x >= y ? 0 : 1;
|
||||
if(x > y)
|
||||
return genUType(detail::highp_int_t(x) - detail::highp_int_t(y));
|
||||
else
|
||||
return genUType(detail::highp_int_t(1) << detail::highp_int_t(32) + detail::highp_int_t(x) - detail::highp_int_t(y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> usubBorrow
|
||||
(
|
||||
detail::tvec2<T> const & x,
|
||||
detail::tvec2<T> const & y,
|
||||
detail::tvec2<T> & Borrow
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
usubBorrow(x[0], y[0], Borrow[0]),
|
||||
usubBorrow(x[1], y[1], Borrow[1]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> usubBorrow
|
||||
(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y,
|
||||
detail::tvec3<T> & Borrow
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
usubBorrow(x[0], y[0], Borrow[0]),
|
||||
usubBorrow(x[1], y[1], Borrow[1]),
|
||||
usubBorrow(x[2], y[2], Borrow[2]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> usubBorrow
|
||||
(
|
||||
detail::tvec4<T> const & x,
|
||||
detail::tvec4<T> const & y,
|
||||
detail::tvec4<T> & Borrow
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
usubBorrow(x[0], y[0], Borrow[0]),
|
||||
usubBorrow(x[1], y[1], Borrow[1]),
|
||||
usubBorrow(x[2], y[2], Borrow[2]),
|
||||
usubBorrow(x[3], y[3], Borrow[3]));
|
||||
}
|
||||
|
||||
// umulExtended
|
||||
template <typename genUType>
|
||||
inline void umulExtended
|
||||
(
|
||||
genUType const & x,
|
||||
genUType const & y,
|
||||
genUType & msb,
|
||||
genUType & lsb
|
||||
)
|
||||
{
|
||||
detail::highp_uint_t ValueX64 = x;
|
||||
detail::highp_uint_t ValueY64 = y;
|
||||
detail::highp_uint_t Value64 = ValueX64 * ValueY64;
|
||||
msb = *(genUType*)&genUType(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1)));
|
||||
lsb = *(genUType*)&genUType(Value64 >> detail::highp_uint_t(32));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> umulExtended
|
||||
(
|
||||
detail::tvec2<T> const & x,
|
||||
detail::tvec2<T> const & y,
|
||||
detail::tvec2<T> & msb,
|
||||
detail::tvec2<T> & lsb
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
umulExtended(x[0], y[0], msb, lsb),
|
||||
umulExtended(x[1], y[1], msb, lsb));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> umulExtended
|
||||
(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y,
|
||||
detail::tvec3<T> & msb,
|
||||
detail::tvec3<T> & lsb
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
umulExtended(x[0], y[0], msb, lsb),
|
||||
umulExtended(x[1], y[1], msb, lsb),
|
||||
umulExtended(x[2], y[2], msb, lsb));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> umulExtended
|
||||
(
|
||||
detail::tvec4<T> const & x,
|
||||
detail::tvec4<T> const & y,
|
||||
detail::tvec4<T> & msb,
|
||||
detail::tvec4<T> & lsb
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
umulExtended(x[0], y[0], msb, lsb),
|
||||
umulExtended(x[1], y[1], msb, lsb),
|
||||
umulExtended(x[2], y[2], msb, lsb),
|
||||
umulExtended(x[3], y[3], msb, lsb));
|
||||
}
|
||||
|
||||
// imulExtended
|
||||
template <typename genIType>
|
||||
void imulExtended
|
||||
(
|
||||
genIType const & x,
|
||||
genIType const & y,
|
||||
genIType & msb,
|
||||
genIType & lsb
|
||||
)
|
||||
{
|
||||
detail::highp_int_t ValueX64 = x;
|
||||
detail::highp_int_t ValueY64 = y;
|
||||
detail::highp_int_t Value64 = ValueX64 * ValueY64;
|
||||
msb = *(genIType*)&genIType(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1)));
|
||||
lsb = *(genIType*)&genIType(Value64 >> detail::highp_uint_t(32));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> imulExtended
|
||||
(
|
||||
detail::tvec2<T> const & x,
|
||||
detail::tvec2<T> const & y,
|
||||
detail::tvec2<T> & msb,
|
||||
detail::tvec2<T> & lsb
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
imulExtended(x[0], y[0], msb, lsb),
|
||||
imulExtended(x[1], y[1], msb, lsb));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> imulExtended
|
||||
(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y,
|
||||
detail::tvec3<T> & msb,
|
||||
detail::tvec3<T> & lsb
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
imulExtended(x[0], y[0], msb, lsb),
|
||||
imulExtended(x[1], y[1], msb, lsb),
|
||||
imulExtended(x[2], y[2], msb, lsb));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> imulExtended
|
||||
(
|
||||
detail::tvec4<T> const & x,
|
||||
detail::tvec4<T> const & y,
|
||||
detail::tvec4<T> & msb,
|
||||
detail::tvec4<T> & lsb
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
imulExtended(x[0], y[0], msb, lsb),
|
||||
imulExtended(x[1], y[1], msb, lsb),
|
||||
imulExtended(x[2], y[2], msb, lsb),
|
||||
imulExtended(x[3], y[3], msb, lsb));
|
||||
}
|
||||
|
||||
// bitfieldExtract
|
||||
template <typename genIUType>
|
||||
genIUType bitfieldExtract
|
||||
(
|
||||
genIUType const & Value,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitfieldExtract' only accept integer values");
|
||||
assert(Offset + Bits <= sizeof(genIUType));
|
||||
|
||||
genIUType Result = 0;
|
||||
if(std::numeric_limits<genIUType>::is_signed)
|
||||
Result |= (1 << (sizeof(genIUType) * 8 - 1)) & (1 << (Offset + Bits - 1));
|
||||
|
||||
genIUType Mask = 0;
|
||||
for(std::size_t Bit = Offset; Bit < Bits; ++Bit)
|
||||
Mask |= (1 << Bit);
|
||||
|
||||
return Result | ((Mask & Value) >> Offset);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> bitfieldExtract
|
||||
(
|
||||
detail::tvec2<T> const & Value,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
bitfieldExtract(Value[0]),
|
||||
bitfieldExtract(Value[1]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> bitfieldExtract
|
||||
(
|
||||
detail::tvec3<T> const & Value,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
bitfieldExtract(Value[0]),
|
||||
bitfieldExtract(Value[1]),
|
||||
bitfieldExtract(Value[2]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> bitfieldExtract
|
||||
(
|
||||
detail::tvec4<T> const & Value,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
bitfieldExtract(Value[0]),
|
||||
bitfieldExtract(Value[1]),
|
||||
bitfieldExtract(Value[2]),
|
||||
bitfieldExtract(Value[3]));
|
||||
}
|
||||
|
||||
// bitfieldInsert
|
||||
template <typename genIUType>
|
||||
inline genIUType bitfieldInsert
|
||||
(
|
||||
genIUType const & Base,
|
||||
genIUType const & Insert,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitfieldInsert' only accept integer values");
|
||||
assert(Offset + Bits <= sizeof(genIUType));
|
||||
|
||||
if(Bits == 0)
|
||||
return Base;
|
||||
|
||||
genIUType Mask = 0;
|
||||
for(std::size_t Bit = Offset; Bit < Offset + Bits; ++Bit)
|
||||
Mask |= (1 << Bit);
|
||||
|
||||
return (Base & ~Mask) | (Insert & Mask);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> bitfieldInsert
|
||||
(
|
||||
detail::tvec2<T> const & Base,
|
||||
detail::tvec2<T> const & Insert,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
bitfieldInsert(Base[0], Insert[0], Offset, Bits),
|
||||
bitfieldInsert(Base[1], Insert[1], Offset, Bits));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> bitfieldInsert
|
||||
(
|
||||
detail::tvec3<T> const & Base,
|
||||
detail::tvec3<T> const & Insert,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
bitfieldInsert(Base[0], Insert[0], Offset, Bits),
|
||||
bitfieldInsert(Base[1], Insert[1], Offset, Bits),
|
||||
bitfieldInsert(Base[2], Insert[2], Offset, Bits));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> bitfieldInsert
|
||||
(
|
||||
detail::tvec4<T> const & Base,
|
||||
detail::tvec4<T> const & Insert,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
bitfieldInsert(Base[0], Insert[0], Offset, Bits),
|
||||
bitfieldInsert(Base[1], Insert[1], Offset, Bits),
|
||||
bitfieldInsert(Base[2], Insert[2], Offset, Bits),
|
||||
bitfieldInsert(Base[3], Insert[3], Offset, Bits));
|
||||
}
|
||||
|
||||
// bitfieldReverse
|
||||
template <typename genIUType>
|
||||
inline genIUType bitfieldReverse(genIUType const & Value)
|
||||
{
|
||||
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitfieldReverse' only accept integer values");
|
||||
|
||||
genIUType Result = 0;
|
||||
for(std::size_t i = 0; i < sizeof(genIUType) * std::size_t(8); ++i)
|
||||
if(Value & (1 << i))
|
||||
Result |= (genIUType(1) << (sizeof(genIUType) * std::size_t(8)) - genIUType(1) - i);
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> bitfieldReverse
|
||||
(
|
||||
detail::tvec2<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
bitfieldReverse(value[0]),
|
||||
bitfieldReverse(value[1]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> bitfieldReverse
|
||||
(
|
||||
detail::tvec3<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
bitfieldReverse(value[0]),
|
||||
bitfieldReverse(value[1]),
|
||||
bitfieldReverse(value[2]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> bitfieldReverse
|
||||
(
|
||||
detail::tvec4<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
bitfieldReverse(value[0]),
|
||||
bitfieldReverse(value[1]),
|
||||
bitfieldReverse(value[2]),
|
||||
bitfieldReverse(value[3]));
|
||||
}
|
||||
|
||||
// bitCount
|
||||
template <typename genIUType>
|
||||
int bitCount(genIUType const & Value)
|
||||
{
|
||||
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitCount' only accept integer values");
|
||||
|
||||
int Count = 0;
|
||||
for(std::size_t i = 0; i < sizeof(genIUType) * std::size_t(8); ++i)
|
||||
{
|
||||
if(Value & (1 << i))
|
||||
++Count;
|
||||
}
|
||||
return Count;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<int> bitCount
|
||||
(
|
||||
detail::tvec2<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec2<int>(
|
||||
bitCount(value[0]),
|
||||
bitCount(value[1]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<int> bitCount
|
||||
(
|
||||
detail::tvec3<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec3<int>(
|
||||
bitCount(value[0]),
|
||||
bitCount(value[1]),
|
||||
bitCount(value[2]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<int> bitCount
|
||||
(
|
||||
detail::tvec4<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec4<int>(
|
||||
bitCount(value[0]),
|
||||
bitCount(value[1]),
|
||||
bitCount(value[2]),
|
||||
bitCount(value[3]));
|
||||
}
|
||||
|
||||
// findLSB
|
||||
template <typename genIUType>
|
||||
inline int findLSB
|
||||
(
|
||||
genIUType const & Value
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::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 <typename T>
|
||||
inline detail::tvec2<int> findLSB
|
||||
(
|
||||
detail::tvec2<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec2<int>(
|
||||
findLSB(value[0]),
|
||||
findLSB(value[1]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<int> findLSB
|
||||
(
|
||||
detail::tvec3<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec3<int>(
|
||||
findLSB(value[0]),
|
||||
findLSB(value[1]),
|
||||
findLSB(value[2]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<int> findLSB
|
||||
(
|
||||
detail::tvec4<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec4<int>(
|
||||
findLSB(value[0]),
|
||||
findLSB(value[1]),
|
||||
findLSB(value[2]),
|
||||
findLSB(value[3]));
|
||||
}
|
||||
|
||||
// findMSB
|
||||
template <typename genIUType>
|
||||
inline int findMSB
|
||||
(
|
||||
genIUType const & Value
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findMSB' only accept integer values");
|
||||
if(Value == 0)
|
||||
return -1;
|
||||
|
||||
genIUType bit = genIUType(-1);
|
||||
for(genIUType tmp = Value; tmp; tmp >>= 1, ++bit){}
|
||||
return bit;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<int> findMSB
|
||||
(
|
||||
detail::tvec2<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec2<int>(
|
||||
findMSB(value[0]),
|
||||
findMSB(value[1]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<int> findMSB
|
||||
(
|
||||
detail::tvec3<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec3<int>(
|
||||
findMSB(value[0]),
|
||||
findMSB(value[1]),
|
||||
findMSB(value[2]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<int> findMSB
|
||||
(
|
||||
detail::tvec4<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec4<int>(
|
||||
findMSB(value[0]),
|
||||
findMSB(value[1]),
|
||||
findMSB(value[2]),
|
||||
findMSB(value[3]));
|
||||
}
|
||||
|
||||
}//namespace integer
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
||||
@@ -1,97 +1,150 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-03
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_matrix.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/func_matrix.hpp
|
||||
/// @date 2008-08-03 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||
///
|
||||
/// @defgroup core_func_matrix Matrix functions
|
||||
/// @ingroup core
|
||||
///
|
||||
/// 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.
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_matrix
|
||||
#define glm_core_func_matrix
|
||||
#ifndef GLM_CORE_func_matrix
|
||||
#define GLM_CORE_func_matrix GLM_VERSION
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_matrix();
|
||||
}//namespace test
|
||||
/// @addtogroup core_func_matrix
|
||||
/// @{
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define all matrix functions from Section 8.5 of GLSL 1.30.8 specification. Included in glm namespace.
|
||||
namespace matrix{
|
||||
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! 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].
|
||||
//! (From GLSL 1.30.08 specification, section 8.5)
|
||||
/// 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].
|
||||
///
|
||||
/// @tparam matType Floating-point matrix types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/matrixCompMult.xml">GLSL matrixCompMult man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||
template <typename matType>
|
||||
matType matrixCompMult(
|
||||
matType const & x,
|
||||
matType const & y);
|
||||
|
||||
//! 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.
|
||||
//! (From GLSL 1.30.08 specification, section 8.5)
|
||||
/// 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.
|
||||
///
|
||||
/// @tparam matType Floating-point matrix types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/outerProduct.xml">GLSL outerProduct man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||
///
|
||||
/// @todo Clarify the declaration to specify that matType doesn't have to be provided when used.
|
||||
template <typename vecType, typename matType>
|
||||
matType outerProduct(
|
||||
vecType const & c,
|
||||
vecType const & r);
|
||||
|
||||
//! Returns the transposed matrix of x
|
||||
//! (From GLSL 1.30.08 specification, section 8.5)
|
||||
/// Returns the transposed matrix of x
|
||||
///
|
||||
/// @tparam matType Floating-point matrix types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/transpose.xml">GLSL transpose man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||
template <typename matType>
|
||||
typename matType::transpose_type transpose(
|
||||
matType const & x);
|
||||
|
||||
//! Return the determinant of a mat2 matrix.
|
||||
//! (From GLSL 1.50.09 specification, section 8.5)..
|
||||
template <typename T>
|
||||
typename detail::tmat2x2<T>::value_type determinant(
|
||||
detail::tmat2x2<T> const & m);
|
||||
/// Return the determinant of a mat2 matrix.
|
||||
///
|
||||
/// @tparam valType Floating-point scalar types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml">GLSL determinant man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||
template <typename valType>
|
||||
typename detail::tmat2x2<valType>::value_type determinant(
|
||||
detail::tmat2x2<valType> const & m);
|
||||
|
||||
//! Return the determinant of a mat3 matrix.
|
||||
//! (From GLSL 1.50.09 specification, section 8.5).
|
||||
template <typename T>
|
||||
typename detail::tmat3x3<T>::value_type determinant(
|
||||
detail::tmat3x3<T> const & m);
|
||||
/// Return the determinant of a mat3 matrix.
|
||||
///
|
||||
/// @tparam valType Floating-point scalar types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml">GLSL determinant man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||
template <typename valType>
|
||||
typename detail::tmat3x3<valType>::value_type determinant(
|
||||
detail::tmat3x3<valType> const & m);
|
||||
|
||||
//! Return the determinant of a mat4 matrix.
|
||||
//! (From GLSL 1.50.09 specification, section 8.5).
|
||||
template <typename T>
|
||||
typename detail::tmat4x4<T>::value_type determinant(
|
||||
detail::tmat4x4<T> const & m);
|
||||
/// Return the determinant of a mat4 matrix.
|
||||
///
|
||||
/// @tparam valType Floating-point scalar types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml">GLSL determinant man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||
template <typename valType>
|
||||
typename detail::tmat4x4<valType>::value_type determinant(
|
||||
detail::tmat4x4<valType> const & m);
|
||||
|
||||
//! Return the inverse of a mat2 matrix.
|
||||
//! (From GLSL 1.40.07 specification, section 8.5).
|
||||
template <typename T>
|
||||
detail::tmat2x2<T> inverse(
|
||||
detail::tmat2x2<T> const & m);
|
||||
/// Return the inverse of a mat2 matrix.
|
||||
///
|
||||
/// @tparam valType Floating-point scalar types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml">GLSL inverse man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||
template <typename valType>
|
||||
detail::tmat2x2<valType> inverse(
|
||||
detail::tmat2x2<valType> const & m);
|
||||
|
||||
//! Return the inverse of a mat3 matrix.
|
||||
//! (From GLSL 1.40.07 specification, section 8.5).
|
||||
template <typename T>
|
||||
detail::tmat3x3<T> inverse(
|
||||
detail::tmat3x3<T> const & m);
|
||||
/// Return the inverse of a mat3 matrix.
|
||||
///
|
||||
/// @tparam valType Floating-point scalar types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml">GLSL inverse man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||
template <typename valType>
|
||||
detail::tmat3x3<valType> inverse(
|
||||
detail::tmat3x3<valType> const & m);
|
||||
|
||||
//! Return the inverse of a mat4 matrix.
|
||||
//! (From GLSL 1.40.07 specification, section 8.5).
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> inverse(
|
||||
detail::tmat4x4<T> const & m);
|
||||
/// Return the inverse of a mat4 matrix.
|
||||
///
|
||||
/// @tparam valType Floating-point scalar types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml">GLSL inverse man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||
template <typename valType>
|
||||
detail::tmat4x4<valType> inverse(
|
||||
detail::tmat4x4<valType> const & m);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace matrix
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::matrix;
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#include "func_matrix.inl"
|
||||
|
||||
#endif//glm_core_func_matrix
|
||||
#endif//GLM_CORE_func_matrix
|
||||
|
||||
@@ -1,42 +1,57 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-03-08
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_matrix.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.
|
||||
///
|
||||
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
/// LIABILITY, WHETHER IN AN ACTION 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/core/func_matrix.inl
|
||||
/// @date 2008-03-08 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace matrix{
|
||||
|
||||
// matrixCompMult
|
||||
template <typename matType>
|
||||
inline matType matrixCompMult
|
||||
// matrixCompMult
|
||||
template <typename matType>
|
||||
GLM_FUNC_QUALIFIER matType matrixCompMult
|
||||
(
|
||||
matType const & x,
|
||||
matType const & y
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<typename matType::value_type>::is_float, "'matrixCompMult' only accept floating-point inputs");
|
||||
|
||||
matType result(matType::null);
|
||||
for(typename matType::size_type i = 0; i < matType::col_size(); ++i)
|
||||
matType result(matType::null);
|
||||
for(typename matType::size_type i = 0; i < matType::row_size(); ++i)
|
||||
result[i] = x[i] * y[i];
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// outerProduct
|
||||
template <typename T>
|
||||
inline detail::tmat2x2<T> outerProduct
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x2<T> outerProduct
|
||||
(
|
||||
detail::tvec2<T> const & c,
|
||||
detail::tvec2<T> const & r
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
|
||||
|
||||
detail::tmat2x2<T> m(detail::tmat2x2<T>::null);
|
||||
@@ -44,41 +59,41 @@ namespace glm
|
||||
m[0][1] = c[1] * r[0];
|
||||
m[1][0] = c[0] * r[1];
|
||||
m[1][1] = c[1] * r[1];
|
||||
return m;
|
||||
}
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat3x3<T> outerProduct
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x3<T> outerProduct
|
||||
(
|
||||
detail::tvec3<T> const & c,
|
||||
detail::tvec3<T> const & r
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
|
||||
|
||||
detail::tmat3x3<T> m(detail::tmat3x3<T>::null);
|
||||
for(typename detail::tmat3x3<T>::size_type i = 0; i < detail::tmat3x3<T>::col_size(); ++i)
|
||||
for(typename detail::tmat3x3<T>::size_type i(0); i < m.length(); ++i)
|
||||
m[i] = c * r[i];
|
||||
return m;
|
||||
}
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x4<T> outerProduct
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> outerProduct
|
||||
(
|
||||
detail::tvec4<T> const & c,
|
||||
detail::tvec4<T> const & r
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
|
||||
|
||||
detail::tmat4x4<T> m(detail::tmat4x4<T>::null);
|
||||
for(typename detail::tmat4x4<T>::size_type i = 0; i < detail::tmat4x4<T>::col_size(); ++i)
|
||||
for(typename detail::tmat4x4<T>::size_type i(0); i < m.length(); ++i)
|
||||
m[i] = c * r[i];
|
||||
return m;
|
||||
}
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat2x3<T> outerProduct
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x3<T> outerProduct
|
||||
(
|
||||
detail::tvec3<T> const & c,
|
||||
detail::tvec2<T> const & r
|
||||
@@ -96,8 +111,8 @@ namespace glm
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat3x2<T> outerProduct
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x2<T> outerProduct
|
||||
(
|
||||
detail::tvec2<T> const & c,
|
||||
detail::tvec3<T> const & r
|
||||
@@ -116,10 +131,10 @@ namespace glm
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat2x4<T> outerProduct
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x4<T> outerProduct
|
||||
(
|
||||
detail::tvec2<T> const & c,
|
||||
detail::tvec4<T> const & r
|
||||
detail::tvec4<T> const & c,
|
||||
detail::tvec2<T> const & r
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
|
||||
@@ -137,10 +152,10 @@ namespace glm
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x2<T> outerProduct
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x2<T> outerProduct
|
||||
(
|
||||
detail::tvec4<T> const & c,
|
||||
detail::tvec2<T> const & r
|
||||
detail::tvec2<T> const & c,
|
||||
detail::tvec4<T> const & r
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
|
||||
@@ -158,7 +173,7 @@ namespace glm
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat3x4<T> outerProduct
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x4<T> outerProduct
|
||||
(
|
||||
detail::tvec4<T> const & c,
|
||||
detail::tvec3<T> const & r
|
||||
@@ -183,7 +198,7 @@ namespace glm
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x3<T> outerProduct
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x3<T> outerProduct
|
||||
(
|
||||
detail::tvec3<T> const & c,
|
||||
detail::tvec4<T> const & r
|
||||
@@ -207,114 +222,114 @@ namespace glm
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat2x2<T> transpose
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x2<T> transpose
|
||||
(
|
||||
detail::tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat2x2<T> result(detail::tmat2x2<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
return result;
|
||||
}
|
||||
detail::tmat2x2<T> result(detail::tmat2x2<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat3x3<T> transpose
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x3<T> transpose
|
||||
(
|
||||
detail::tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat3x3<T> result(detail::tmat3x3<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][2] = m[2][0];
|
||||
detail::tmat3x3<T> result(detail::tmat3x3<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][2] = m[2][0];
|
||||
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][2] = m[2][1];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][2] = m[2][1];
|
||||
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[2][2] = m[2][2];
|
||||
return result;
|
||||
}
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[2][2] = m[2][2];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x4<T> transpose
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> transpose
|
||||
(
|
||||
detail::tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat4x4<T> result(detail::tmat4x4<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][2] = m[2][0];
|
||||
result[0][3] = m[3][0];
|
||||
detail::tmat4x4<T> result(detail::tmat4x4<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][2] = m[2][0];
|
||||
result[0][3] = m[3][0];
|
||||
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][2] = m[2][1];
|
||||
result[1][3] = m[3][1];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][2] = m[2][1];
|
||||
result[1][3] = m[3][1];
|
||||
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[2][2] = m[2][2];
|
||||
result[2][3] = m[3][2];
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[2][2] = m[2][2];
|
||||
result[2][3] = m[3][2];
|
||||
|
||||
result[3][0] = m[0][3];
|
||||
result[3][1] = m[1][3];
|
||||
result[3][2] = m[2][3];
|
||||
result[3][3] = m[3][3];
|
||||
return result;
|
||||
}
|
||||
result[3][0] = m[0][3];
|
||||
result[3][1] = m[1][3];
|
||||
result[3][2] = m[2][3];
|
||||
result[3][3] = m[3][3];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat2x3<T> transpose
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x3<T> transpose
|
||||
(
|
||||
detail::tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat2x3<T> result(detail::tmat2x3<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
detail::tmat2x3<T> result(detail::tmat2x3<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][2] = m[2][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][2] = m[2][1];
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat3x2<T> transpose
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x2<T> transpose
|
||||
(
|
||||
detail::tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat3x2<T> result(detail::tmat3x2<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
return result;
|
||||
}
|
||||
detail::tmat3x2<T> result(detail::tmat3x2<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat2x4<T> transpose
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x4<T> transpose
|
||||
(
|
||||
detail::tmat4x2<T> const & m
|
||||
)
|
||||
@@ -322,39 +337,39 @@ namespace glm
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat2x4<T> result(detail::tmat2x4<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][2] = m[2][0];
|
||||
result[0][3] = m[3][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][2] = m[2][1];
|
||||
result[1][3] = m[3][1];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x2<T> transpose
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x2<T> transpose
|
||||
(
|
||||
detail::tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat4x2<T> result(detail::tmat4x2<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[3][0] = m[0][3];
|
||||
result[3][1] = m[1][3];
|
||||
return result;
|
||||
detail::tmat4x2<T> result(detail::tmat4x2<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[3][0] = m[0][3];
|
||||
result[3][1] = m[1][3];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat3x4<T> transpose
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x4<T> transpose
|
||||
(
|
||||
detail::tmat4x3<T> const & m
|
||||
)
|
||||
@@ -362,47 +377,47 @@ namespace glm
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat3x4<T> result(detail::tmat3x4<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][2] = m[2][0];
|
||||
result[0][3] = m[3][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][2] = m[2][1];
|
||||
result[1][3] = m[3][1];
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[2][2] = m[2][2];
|
||||
result[2][3] = m[3][2];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x3<T> transpose
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x3<T> transpose
|
||||
(
|
||||
detail::tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat4x3<T> result(detail::tmat4x3<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
detail::tmat4x3<T> result(detail::tmat4x3<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][2] = m[2][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][2] = m[2][1];
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[2][2] = m[2][2];
|
||||
result[3][0] = m[0][3];
|
||||
result[3][1] = m[1][3];
|
||||
result[3][0] = m[0][3];
|
||||
result[3][1] = m[1][3];
|
||||
result[3][2] = m[2][3];
|
||||
return result;
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename detail::tmat2x2<T>::value_type determinant
|
||||
GLM_FUNC_QUALIFIER typename detail::tmat2x2<T>::value_type determinant
|
||||
(
|
||||
detail::tmat2x2<T> const & m
|
||||
)
|
||||
@@ -413,7 +428,7 @@ namespace glm
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename detail::tmat3x3<T>::value_type determinant
|
||||
GLM_FUNC_QUALIFIER typename detail::tmat3x3<T>::value_type determinant
|
||||
(
|
||||
detail::tmat3x3<T> const & m
|
||||
)
|
||||
@@ -427,7 +442,7 @@ namespace glm
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename detail::tmat4x4<T>::value_type determinant
|
||||
GLM_FUNC_QUALIFIER typename detail::tmat4x4<T>::value_type determinant
|
||||
(
|
||||
detail::tmat4x4<T> const & m
|
||||
)
|
||||
@@ -448,13 +463,13 @@ namespace glm
|
||||
- (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));
|
||||
|
||||
return m[0][0] * DetCof[0]
|
||||
+ m[0][1] * DetCof[1]
|
||||
+ m[0][2] * DetCof[2]
|
||||
+ m[0][3] * DetCof[3];
|
||||
+ m[0][1] * DetCof[1]
|
||||
+ m[0][2] * DetCof[2]
|
||||
+ m[0][3] * DetCof[3];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat2x2<T> inverse
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x2<T> inverse
|
||||
(
|
||||
detail::tmat2x2<T> const & m
|
||||
)
|
||||
@@ -466,15 +481,15 @@ namespace glm
|
||||
|
||||
detail::tmat2x2<T> Inverse(
|
||||
+ m[1][1] / Determinant,
|
||||
- m[1][0] / Determinant,
|
||||
- m[0][1] / Determinant,
|
||||
- m[1][0] / Determinant,
|
||||
+ m[0][0] / Determinant);
|
||||
|
||||
return Inverse;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat3x3<T> inverse
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x3<T> inverse
|
||||
(
|
||||
detail::tmat3x3<T> const & m
|
||||
)
|
||||
@@ -503,7 +518,7 @@ namespace glm
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x4<T> inverse
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> inverse
|
||||
(
|
||||
detail::tmat4x4<T> const & m
|
||||
)
|
||||
@@ -561,11 +576,7 @@ namespace glm
|
||||
T Determinant = glm::dot(m[0], Row0);
|
||||
|
||||
Inverse /= Determinant;
|
||||
|
||||
|
||||
return Inverse;
|
||||
}
|
||||
|
||||
}//namespace matrix
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-01
|
||||
// Updated : 2008-09-10
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_noise.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_noise
|
||||
#define glm_core_func_noise
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_noise();
|
||||
}//namespace test
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
// Define all noise functions from Section 8.9 of GLSL 1.30.8 specification. Included in glm namespace.
|
||||
namespace noise{
|
||||
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
// Returns a 1D noise value based on the input value x.
|
||||
// From GLSL 1.30.08 specification, section 8.9.
|
||||
template <typename genType>
|
||||
typename genType::value_type noise1(genType const & x);
|
||||
|
||||
// Returns a 2D noise value based on the input value x.
|
||||
// From GLSL 1.30.08 specification, section 8.9.
|
||||
template <typename genType>
|
||||
detail::tvec2<typename genType::value_type> noise2(genType const & x);
|
||||
|
||||
// Returns a 3D noise value based on the input value x.
|
||||
// From GLSL 1.30.08 specification, section 8.9.
|
||||
template <typename genType>
|
||||
detail::tvec3<typename genType::value_type> noise3(genType const & x);
|
||||
|
||||
// Returns a 4D noise value based on the input value x.
|
||||
// From GLSL 1.30.08 specification, section 8.9.
|
||||
template <typename genType>
|
||||
detail::tvec4<typename genType::value_type> noise4(genType const & x);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace noise
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::noise;
|
||||
}//namespace glm
|
||||
|
||||
#include "func_noise.inl"
|
||||
|
||||
#endif//glm_core_func_noise
|
||||
@@ -1,305 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-01
|
||||
// Updated : 2008-09-23
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_noise.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace noise{
|
||||
|
||||
// noise1
|
||||
template <typename genType>
|
||||
inline genType noise1
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'noise1' only accept floating-point values");
|
||||
|
||||
int iNbr = int(x + genType(3) / genType(2)) * 1103515245 + 12345;
|
||||
return genType(int(iNbr / genType(65536)) % 32768) / genType(32767);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename detail::tvec2<T>::value_type noise1
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
T tmp(0);
|
||||
for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
|
||||
tmp += x[i];
|
||||
return noise1(tmp);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename detail::tvec3<T>::value_type noise1
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
T tmp(0);
|
||||
for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
|
||||
tmp += x[i];
|
||||
return noise1(tmp);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename detail::tvec4<T>::value_type noise1
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
T tmp(0);
|
||||
for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
|
||||
tmp += x[i];
|
||||
return noise1(tmp);
|
||||
}
|
||||
|
||||
// noise2
|
||||
template <typename genType>
|
||||
inline detail::tvec2<genType> noise2
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'noise2' only accept floating-point values");
|
||||
|
||||
genType f1 = x * genType(1103515245) + genType(12345);
|
||||
genType f2 = f1 * genType(1103515245) + genType(12345);
|
||||
return detail::tvec2<genType>(
|
||||
noise1(f1),
|
||||
noise1(f2));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> noise2
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'noise2' only accept floating-point values");
|
||||
|
||||
T f0(0);
|
||||
for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
|
||||
f0 += x[i];
|
||||
|
||||
T f1 = f0 * T(1103515245) + T(12345);
|
||||
T f2 = f1 * T(1103515245) + T(12345);
|
||||
return detail::tvec2<T>(
|
||||
noise1(f1),
|
||||
noise1(f2));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> noise2
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'noise2' only accept floating-point values");
|
||||
|
||||
T f0(0);
|
||||
for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
|
||||
f0 += x[i];
|
||||
|
||||
T f1 = f0 * T(1103515245) + T(12345);
|
||||
T f2 = f1 * T(1103515245) + T(12345);
|
||||
return detail::tvec2<T>(
|
||||
noise1(f1),
|
||||
noise1(f2));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> noise2
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'noise2' only accept floating-point values");
|
||||
|
||||
T f0(0);
|
||||
for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
|
||||
f0 += x[i];
|
||||
|
||||
T f1 = f0 * T(1103515245) + T(12345);
|
||||
T f2 = f1 * T(1103515245) + T(12345);
|
||||
return detail::tvec2<T>(
|
||||
noise1(f1),
|
||||
noise1(f2));
|
||||
}
|
||||
|
||||
// noise3
|
||||
template <typename genType>
|
||||
inline detail::tvec3<genType> noise3
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'noise3' only accept floating-point values");
|
||||
|
||||
genType f1 = x * genType(1103515245) + genType(12345);
|
||||
genType f2 = f1 * genType(1103515245) + genType(12345);
|
||||
genType f3 = f2 * genType(1103515245) + genType(12345);
|
||||
return detail::tvec3<genType>(
|
||||
noise1(f1),
|
||||
noise1(f2),
|
||||
noise1(f3));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> noise3
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'noise3' only accept floating-point values");
|
||||
|
||||
T f0(0);
|
||||
for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
|
||||
f0 += x[i];
|
||||
T f1 = f0 * T(1103515245) + T(12345);
|
||||
T f2 = f1 * T(1103515245) + T(12345);
|
||||
T f3 = f2 * T(1103515245) + T(12345);
|
||||
return detail::tvec3<T>(
|
||||
noise1(f1),
|
||||
noise1(f2),
|
||||
noise1(f3));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> noise3
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'noise3' only accept floating-point values");
|
||||
|
||||
T f0(0);
|
||||
for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
|
||||
f0 += x[i];
|
||||
T f1 = f0 * T(1103515245) + T(12345);
|
||||
T f2 = f1 * T(1103515245) + T(12345);
|
||||
T f3 = f2 * T(1103515245) + T(12345);
|
||||
return detail::tvec3<T>(
|
||||
noise1(f1),
|
||||
noise1(f2),
|
||||
noise1(f3));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> noise3
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'noise3' only accept floating-point values");
|
||||
|
||||
T f0(0);
|
||||
for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
|
||||
f0 += x[i];
|
||||
T f1 = f0 * T(1103515245) + T(12345);
|
||||
T f2 = f1 * T(1103515245) + T(12345);
|
||||
T f3 = f2 * T(1103515245) + T(12345);
|
||||
return detail::tvec3<T>(
|
||||
noise1(f1),
|
||||
noise1(f2),
|
||||
noise1(f3));
|
||||
}
|
||||
|
||||
// noise4
|
||||
template <typename genType>
|
||||
inline detail::tvec4<genType> noise4
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'noise4' only accept floating-point values");
|
||||
|
||||
genType f1 = x * genType(1103515245) + genType(12345);
|
||||
genType f2 = f1 * genType(1103515245) + genType(12345);
|
||||
genType f3 = f2 * genType(1103515245) + genType(12345);
|
||||
genType f4 = f3 * genType(1103515245) + genType(12345);
|
||||
return detail::tvec4<genType>(
|
||||
noise1(f1),
|
||||
noise1(f2),
|
||||
noise1(f3),
|
||||
noise1(f4));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> noise4
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'noise4' only accept floating-point values");
|
||||
|
||||
T f0(0);
|
||||
for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
|
||||
f0 += x[i];
|
||||
T f1 = f0 * T(1103515245) + T(12345);
|
||||
T f2 = f1 * T(1103515245) + T(12345);
|
||||
T f3 = f2 * T(1103515245) + T(12345);
|
||||
T f4 = f3 * T(1103515245) + T(12345);
|
||||
return detail::tvec4<T>(
|
||||
noise1(f1),
|
||||
noise1(f2),
|
||||
noise1(f3),
|
||||
noise1(f4));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> noise4
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'noise4' only accept floating-point values");
|
||||
|
||||
T f0(0);
|
||||
for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size()(); ++i)
|
||||
f0 += x[i];
|
||||
T f1 = f0 * T(1103515245) + T(12345);
|
||||
T f2 = f1 * T(1103515245) + T(12345);
|
||||
T f3 = f2 * T(1103515245) + T(12345);
|
||||
T f4 = f3 * T(1103515245) + T(12345);
|
||||
return detail::tvec4<T>(
|
||||
noise1(f1),
|
||||
noise1(f2),
|
||||
noise1(f3),
|
||||
noise1(f4));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> noise4
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'noise4' only accept floating-point values");
|
||||
|
||||
T f0(0);
|
||||
for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size()(); ++i)
|
||||
f0 += x[i];
|
||||
T f1 = f0 * T(1103515245) + T(12345);
|
||||
T f2 = f1 * T(1103515245) + T(12345);
|
||||
T f3 = f2 * T(1103515245) + T(12345);
|
||||
T f4 = f3 * T(1103515245) + T(12345);
|
||||
return detail::tvec4<T>(
|
||||
noise1(f1),
|
||||
noise1(f2),
|
||||
noise1(f3),
|
||||
noise1(f4));
|
||||
}
|
||||
|
||||
}//namespace noise
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
||||
@@ -1,50 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-03-17
|
||||
// Updated : 2010-03-17
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_packing.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_packing
|
||||
#define glm_core_func_packing
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_packing();
|
||||
}//namespace test
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define packing functions from section 8.4 floating-point pack and unpack functions of GLSL 4.00.8 specification
|
||||
namespace packing
|
||||
{
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
detail::uint32 packUnorm2x16(detail::tvec2<detail::float32> const & v);
|
||||
detail::uint32 packUnorm4x8(detail::tvec4<detail::float32> const & v);
|
||||
detail::uint32 packSnorm4x8(detail::tvec4<detail::float32> const & v);
|
||||
|
||||
detail::tvec2<detail::float32> unpackUnorm2x16(detail::uint32 const & p);
|
||||
detail::tvec4<detail::float32> unpackUnorm4x8(detail::uint32 const & p);
|
||||
detail::tvec4<detail::float32> unpackSnorm4x8(detail::uint32 const & p);
|
||||
|
||||
double packDouble2x32(detail::tvec2<detail::uint32> const & v);
|
||||
detail::tvec2<detail::uint32> unpackDouble2x32(double const & v);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace packing
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::packing;
|
||||
}//namespace glm
|
||||
|
||||
#include "func_packing.inl"
|
||||
|
||||
#endif//glm_core_func_packing
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-03-17
|
||||
// Updated : 2010-03-17
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_packing.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
|
||||
}//namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace packing
|
||||
{
|
||||
inline detail::uint32 packUnorm2x16(detail::tvec2<detail::float32> const & v)
|
||||
{
|
||||
detail::uint16 A((detail::uint16)round(clamp(v.x, 0.0f, 1.0f) * 65535.0f));
|
||||
detail::uint16 B((detail::uint16)round(clamp(v.y, 0.0f, 1.0f) * 65535.0f));
|
||||
return detail::uint32((B << 16) | A);
|
||||
}
|
||||
|
||||
inline detail::uint32 packUnorm4x8(detail::tvec4<detail::float32> const & v)
|
||||
{
|
||||
detail::uint8 A((detail::uint8)round(clamp(v.x, 0.0f, 1.0f) * 255.0f));
|
||||
detail::uint8 B((detail::uint8)round(clamp(v.y, 0.0f, 1.0f) * 255.0f));
|
||||
detail::uint8 C((detail::uint8)round(clamp(v.z, 0.0f, 1.0f) * 255.0f));
|
||||
detail::uint8 D((detail::uint8)round(clamp(v.w, 0.0f, 1.0f) * 255.0f));
|
||||
return detail::uint32((D << 24) | (C << 16) | (B << 8) | A);
|
||||
}
|
||||
|
||||
inline detail::uint32 packSnorm4x8(detail::tvec4<detail::float32> const & v)
|
||||
{
|
||||
detail::uint8 A((detail::uint8)round(clamp(v.x,-1.0f, 1.0f) * 255.0f));
|
||||
detail::uint8 B((detail::uint8)round(clamp(v.y,-1.0f, 1.0f) * 255.0f));
|
||||
detail::uint8 C((detail::uint8)round(clamp(v.z,-1.0f, 1.0f) * 255.0f));
|
||||
detail::uint8 D((detail::uint8)round(clamp(v.w,-1.0f, 1.0f) * 255.0f));
|
||||
return detail::uint32((D << 24) | (C << 16) | (B << 8) | A);
|
||||
}
|
||||
|
||||
inline detail::tvec2<detail::float32> unpackUnorm2x16(detail::uint32 const & p)
|
||||
{
|
||||
detail::uint16 A(detail::uint16(p >> 0));
|
||||
detail::uint16 B(detail::uint16(p >> 16));
|
||||
return detail::tvec2<detail::float32>(
|
||||
A * 1.0f / 65535.0f,
|
||||
B * 1.0f / 65535.0f);
|
||||
}
|
||||
|
||||
inline detail::tvec4<detail::float32> unpackUnorm4x8(detail::uint32 const & p)
|
||||
{
|
||||
detail::uint8 A(detail::uint8(p >> 0));
|
||||
detail::uint8 B(detail::uint8(p >> 8));
|
||||
detail::uint8 C(detail::uint8(p >> 16));
|
||||
detail::uint8 D(detail::uint8(p >> 24));
|
||||
return detail::tvec4<detail::float32>(
|
||||
A * 1.0f / 255.0f,
|
||||
B * 1.0f / 255.0f,
|
||||
C * 1.0f / 255.0f,
|
||||
D * 1.0f / 255.0f);
|
||||
}
|
||||
|
||||
inline detail::tvec4<detail::float32> unpackSnorm4x8(detail::uint32 const & p)
|
||||
{
|
||||
detail::uint8 A(detail::uint8(p >> 0));
|
||||
detail::uint8 B(detail::uint8(p >> 8));
|
||||
detail::uint8 C(detail::uint8(p >> 16));
|
||||
detail::uint8 D(detail::uint8(p >> 24));
|
||||
return clamp(detail::tvec4<detail::float32>(
|
||||
A * 1.0f / 127.0f,
|
||||
B * 1.0f / 127.0f,
|
||||
C * 1.0f / 127.0f,
|
||||
D * 1.0f / 127.0f), -1.0f, 1.0f);
|
||||
}
|
||||
|
||||
inline double packDouble2x32(detail::tvec2<detail::uint32> const & v)
|
||||
{
|
||||
return *(double*)&v;
|
||||
}
|
||||
|
||||
inline detail::tvec2<detail::uint32> unpackDouble2x32(double const & v)
|
||||
{
|
||||
return *(detail::tvec2<detail::uint32>*)&v;
|
||||
}
|
||||
|
||||
}//namespace packing
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
||||
@@ -1,130 +1,203 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-01
|
||||
// Updated : 2008-09-10
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_trigonometric.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/func_trigonometric.hpp
|
||||
/// @date 2008-08-01 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
///
|
||||
/// @defgroup core_func_trigonometric Angle and Trigonometry Functions
|
||||
/// @ingroup core
|
||||
///
|
||||
/// 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.
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_trigonometric
|
||||
#define glm_core_func_trigonometric
|
||||
#ifndef GLM_CORE_func_trigonometric
|
||||
#define GLM_CORE_func_trigonometric GLM_VERSION
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_trigonometric();
|
||||
}//namespace test
|
||||
/// @addtogroup core_func_trigonometric
|
||||
/// @{
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define Angle and trigonometry functions
|
||||
//! from Section 8.1 of GLSL 1.30.8 specification.
|
||||
//! Included in glm namespace.
|
||||
namespace trigonometric{
|
||||
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! Converts degrees to radians and returns the result.
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// Converts degrees to radians and returns the result.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/radians.xml">GLSL radians man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType radians(genType const & degrees);
|
||||
|
||||
//! Converts radians to degrees and returns the result.
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// Converts radians to degrees and returns the result.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/degrees.xml">GLSL degrees man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType degrees(genType const & radians);
|
||||
|
||||
//! The standard trigonometric sine function.
|
||||
//! The values returned by this function will range from [-1, 1].
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// The standard trigonometric sine function.
|
||||
/// The values returned by this function will range from [-1, 1].
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sin.xml">GLSL sin man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType sin(genType const & angle);
|
||||
|
||||
//! The standard trigonometric cosine function.
|
||||
//! The values returned by this function will range from [-1, 1].
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// The standard trigonometric cosine function.
|
||||
/// The values returned by this function will range from [-1, 1].
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cos.xml">GLSL cos man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType cos(genType const & angle);
|
||||
|
||||
//! The standard trigonometric tangent function.
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// The standard trigonometric tangent function.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/tan.xml">GLSL tan man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType tan(genType const & angle);
|
||||
|
||||
//! 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.
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// 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.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/asin.xml">GLSL asin man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType asin(genType const & 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.
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// 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.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/acos.xml">GLSL acos man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType acos(genType const & x);
|
||||
|
||||
//! 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.
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// 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.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml">GLSL atan man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType atan(genType const & y, genType const & x);
|
||||
|
||||
//! Arc tangent. Returns an angle whose tangent is y_over_x.
|
||||
//! The range of values returned by this function is [-PI/2, PI/2].
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// Arc tangent. Returns an angle whose tangent is y_over_x.
|
||||
/// The range of values returned by this function is [-PI/2, PI/2].
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml">GLSL atan man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType atan(genType const & y_over_x);
|
||||
|
||||
//! Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sinh.xml">GLSL sinh man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType sinh(genType const & angle);
|
||||
|
||||
//! Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cosh.xml">GLSL cosh man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType cosh(genType const & angle);
|
||||
|
||||
//! Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/tanh.xml">GLSL tanh man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType tanh(genType const & angle);
|
||||
|
||||
//! Arc hyperbolic sine; returns the inverse of sinh.
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// Arc hyperbolic sine; returns the inverse of sinh.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/asinh.xml">GLSL asinh man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType asinh(genType const & x);
|
||||
|
||||
//! Arc hyperbolic cosine; returns the non-negative inverse
|
||||
//! of cosh. Results are undefined if x < 1.
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// Arc hyperbolic cosine; returns the non-negative inverse
|
||||
/// of cosh. Results are undefined if x < 1.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/acosh.xml">GLSL acosh man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType acosh(genType const & x);
|
||||
|
||||
//! Arc hyperbolic tangent; returns the inverse of tanh.
|
||||
//! Results are undefined if abs(x) >= 1.
|
||||
//! (From GLSL 1.30.08 specification, section 8.1)
|
||||
/// Arc hyperbolic tangent; returns the inverse of tanh.
|
||||
/// Results are undefined if abs(x) >= 1.
|
||||
///
|
||||
/// @tparam genType Floating-point scalar or vector types.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atanh.xml">GLSL atanh man page</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||
template <typename genType>
|
||||
genType atanh(genType const & x);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace trigonometric
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::trigonometric;
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#include "func_trigonometric.inl"
|
||||
|
||||
#endif//glm_core_func_trigonometric
|
||||
#endif//GLM_CORE_func_trigonometric
|
||||
|
||||
|
||||
|
||||
@@ -1,745 +1,244 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-03
|
||||
// Updated : 2008-09-14
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_trigonometric.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.
|
||||
///
|
||||
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
/// LIABILITY, WHETHER IN AN ACTION 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/core/func_trigonometric.inl
|
||||
/// @date 2008-08-03 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace trigonometric{
|
||||
|
||||
// radians
|
||||
template <typename genType>
|
||||
inline genType radians
|
||||
// radians
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType radians
|
||||
(
|
||||
genType const & degrees
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'radians' only accept floating-point input");
|
||||
|
||||
const genType pi = genType(3.1415926535897932384626433832795);
|
||||
return degrees * (pi / genType(180));
|
||||
}
|
||||
genType const pi = genType(3.1415926535897932384626433832795);
|
||||
return degrees * (pi / genType(180));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> radians
|
||||
(
|
||||
detail::tvec2<T> const & degrees
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
radians(degrees.x),
|
||||
radians(degrees.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> radians
|
||||
(
|
||||
detail::tvec3<T> const & degrees
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
radians(degrees.x),
|
||||
radians(degrees.y),
|
||||
radians(degrees.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> radians
|
||||
(
|
||||
detail::tvec4<T> const & degrees
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
radians(degrees.x),
|
||||
radians(degrees.y),
|
||||
radians(degrees.z),
|
||||
radians(degrees.w));
|
||||
}
|
||||
|
||||
// degrees
|
||||
template <typename genType>
|
||||
inline genType degrees
|
||||
VECTORIZE_VEC(radians)
|
||||
|
||||
// degrees
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType degrees
|
||||
(
|
||||
genType const & radians
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'degrees' only accept floating-point input");
|
||||
|
||||
const genType pi = genType(3.1415926535897932384626433832795);
|
||||
return radians * (genType(180) / pi);
|
||||
}
|
||||
const genType pi = genType(3.1415926535897932384626433832795);
|
||||
return radians * (genType(180) / pi);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> degrees
|
||||
(
|
||||
detail::tvec2<T> const & radians
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
degrees(radians.x),
|
||||
degrees(radians.y));
|
||||
}
|
||||
VECTORIZE_VEC(degrees)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> degrees
|
||||
(
|
||||
detail::tvec3<T> const & radians
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
degrees(radians.x),
|
||||
degrees(radians.y),
|
||||
degrees(radians.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> degrees
|
||||
(
|
||||
detail::tvec4<T> const & radians
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
degrees(radians.x),
|
||||
degrees(radians.y),
|
||||
degrees(radians.z),
|
||||
degrees(radians.w));
|
||||
}
|
||||
|
||||
// sin
|
||||
template <typename genType>
|
||||
inline genType sin
|
||||
// sin
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType sin
|
||||
(
|
||||
genType const & angle
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'sin' only accept floating-point input");
|
||||
|
||||
return ::std::sin(angle);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> sin
|
||||
(
|
||||
detail::tvec2<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
sin(angle.x),
|
||||
sin(angle.y));
|
||||
}
|
||||
VECTORIZE_VEC(sin)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> sin
|
||||
(
|
||||
detail::tvec3<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
sin(angle.x),
|
||||
sin(angle.y),
|
||||
sin(angle.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> sin
|
||||
(
|
||||
detail::tvec4<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
sin(angle.x),
|
||||
sin(angle.y),
|
||||
sin(angle.z),
|
||||
sin(angle.w));
|
||||
}
|
||||
|
||||
// cos
|
||||
template <typename genType>
|
||||
inline genType cos(genType const & angle)
|
||||
{
|
||||
// cos
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType cos(genType const & angle)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'cos' only accept floating-point input");
|
||||
|
||||
return ::std::cos(angle);
|
||||
}
|
||||
return ::std::cos(angle);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> cos
|
||||
(
|
||||
detail::tvec2<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
cos(angle.x),
|
||||
cos(angle.y));
|
||||
}
|
||||
VECTORIZE_VEC(cos)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> cos
|
||||
(
|
||||
detail::tvec3<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
cos(angle.x),
|
||||
cos(angle.y),
|
||||
cos(angle.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> cos
|
||||
(
|
||||
detail::tvec4<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
cos(angle.x),
|
||||
cos(angle.y),
|
||||
cos(angle.z),
|
||||
cos(angle.w));
|
||||
}
|
||||
|
||||
// tan
|
||||
template <typename genType>
|
||||
inline genType tan
|
||||
// tan
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType tan
|
||||
(
|
||||
genType const & angle
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'tan' only accept floating-point input");
|
||||
|
||||
return ::std::tan(angle);
|
||||
}
|
||||
return ::std::tan(angle);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> tan
|
||||
(
|
||||
detail::tvec2<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
tan(angle.x),
|
||||
tan(angle.y));
|
||||
}
|
||||
VECTORIZE_VEC(tan)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> tan
|
||||
(
|
||||
detail::tvec3<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
tan(angle.x),
|
||||
tan(angle.y),
|
||||
tan(angle.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> tan
|
||||
(
|
||||
detail::tvec4<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
tan(angle.x),
|
||||
tan(angle.y),
|
||||
tan(angle.z),
|
||||
tan(angle.w));
|
||||
}
|
||||
|
||||
// asin
|
||||
template <typename genType>
|
||||
inline genType asin
|
||||
// asin
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType asin
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'asin' only accept floating-point input");
|
||||
|
||||
return ::std::asin(x);
|
||||
}
|
||||
return ::std::asin(x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> asin
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
asin(x.x),
|
||||
asin(x.y));
|
||||
}
|
||||
VECTORIZE_VEC(asin)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> asin
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
asin(x.x),
|
||||
asin(x.y),
|
||||
asin(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> asin
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
asin(x.x),
|
||||
asin(x.y),
|
||||
asin(x.z),
|
||||
asin(x.w));
|
||||
}
|
||||
|
||||
// acos
|
||||
template <typename genType>
|
||||
inline genType acos
|
||||
// acos
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType acos
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'acos' only accept floating-point input");
|
||||
|
||||
return ::std::acos(x);
|
||||
}
|
||||
return ::std::acos(x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> acos
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
acos(x.x),
|
||||
acos(x.y));
|
||||
}
|
||||
VECTORIZE_VEC(acos)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> acos
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
acos(x.x),
|
||||
acos(x.y),
|
||||
acos(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> acos
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
acos(x.x),
|
||||
acos(x.y),
|
||||
acos(x.z),
|
||||
acos(x.w));
|
||||
}
|
||||
|
||||
// atan
|
||||
template <typename genType>
|
||||
inline genType atan
|
||||
// atan
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType atan
|
||||
(
|
||||
genType const & y,
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'atan' only accept floating-point input");
|
||||
|
||||
return ::std::atan2(y, x);
|
||||
}
|
||||
return ::std::atan2(y, x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> atan
|
||||
(
|
||||
detail::tvec2<T> const & y,
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
atan(y.x, x.x),
|
||||
atan(y.y, x.y));
|
||||
}
|
||||
VECTORIZE_VEC_VEC(atan)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> atan
|
||||
(
|
||||
detail::tvec3<T> const & y,
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
atan(y.x, x.x),
|
||||
atan(y.y, x.y),
|
||||
atan(y.z, x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> atan
|
||||
(
|
||||
detail::tvec4<T> const & y,
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
atan(y.x, x.x),
|
||||
atan(y.y, x.y),
|
||||
atan(y.z, x.z),
|
||||
atan(y.w, x.w));
|
||||
}
|
||||
|
||||
template <typename genType>
|
||||
inline genType atan
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType atan
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'atan' only accept floating-point input");
|
||||
|
||||
return ::std::atan(x);
|
||||
}
|
||||
return ::std::atan(x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> atan
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
atan(x.x),
|
||||
atan(x.y));
|
||||
}
|
||||
VECTORIZE_VEC(atan)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> atan
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
atan(x.x),
|
||||
atan(x.y),
|
||||
atan(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> atan
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
atan(x.x),
|
||||
atan(x.y),
|
||||
atan(x.z),
|
||||
atan(x.w));
|
||||
}
|
||||
|
||||
// sinh
|
||||
template <typename genType>
|
||||
inline genType sinh
|
||||
// sinh
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType sinh
|
||||
(
|
||||
genType const & angle
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'sinh' only accept floating-point input");
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'sinh' only accept floating-point input");
|
||||
|
||||
return std::sinh(angle);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> sinh
|
||||
(
|
||||
detail::tvec2<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
sinh(angle.x),
|
||||
sinh(angle.y));
|
||||
}
|
||||
VECTORIZE_VEC(sinh)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> sinh
|
||||
(
|
||||
detail::tvec3<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
sinh(angle.x),
|
||||
sinh(angle.y),
|
||||
sinh(angle.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> sinh
|
||||
(
|
||||
detail::tvec4<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
sinh(angle.x),
|
||||
sinh(angle.y),
|
||||
sinh(angle.z),
|
||||
sinh(angle.w));
|
||||
}
|
||||
|
||||
// cosh
|
||||
template <typename genType>
|
||||
inline genType cosh
|
||||
// cosh
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType cosh
|
||||
(
|
||||
genType const & angle
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'cosh' only accept floating-point input");
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'cosh' only accept floating-point input");
|
||||
|
||||
return std::cosh(angle);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> cosh
|
||||
(
|
||||
detail::tvec2<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
cosh(angle.x),
|
||||
cosh(angle.y));
|
||||
}
|
||||
VECTORIZE_VEC(cosh)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> cosh
|
||||
(
|
||||
detail::tvec3<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
cosh(angle.x),
|
||||
cosh(angle.y),
|
||||
cosh(angle.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> cosh
|
||||
(
|
||||
detail::tvec4<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
cosh(angle.x),
|
||||
cosh(angle.y),
|
||||
cosh(angle.z),
|
||||
cosh(angle.w));
|
||||
}
|
||||
|
||||
// tanh
|
||||
template <typename genType>
|
||||
inline genType tanh
|
||||
// tanh
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType tanh
|
||||
(
|
||||
genType const & angle
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'tanh' only accept floating-point input");
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'tanh' only accept floating-point input");
|
||||
|
||||
return std::tanh(angle);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> tanh
|
||||
(
|
||||
detail::tvec2<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
tanh(angle.x),
|
||||
tanh(angle.y));
|
||||
}
|
||||
VECTORIZE_VEC(tanh)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> tanh
|
||||
(
|
||||
detail::tvec3<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
tanh(angle.x),
|
||||
tanh(angle.y),
|
||||
tanh(angle.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> tanh
|
||||
(
|
||||
detail::tvec4<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
tanh(angle.x),
|
||||
tanh(angle.y),
|
||||
tanh(angle.z),
|
||||
tanh(angle.w));
|
||||
}
|
||||
|
||||
// asinh
|
||||
template <typename genType>
|
||||
inline genType asinh
|
||||
// asinh
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType asinh
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'asinh' only accept floating-point input");
|
||||
|
||||
return (x < genType(0) ? genType(-1) : (x > genType(0) ? genType(1) : genType(0))) * log(abs(x) + sqrt(genType(1) + x * x));
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> asinh
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
asinh(x.x),
|
||||
asinh(x.y));
|
||||
}
|
||||
VECTORIZE_VEC(asinh)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> asinh
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
asinh(x.x),
|
||||
asinh(x.y),
|
||||
asinh(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> asinh
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
asinh(x.x),
|
||||
asinh(x.y),
|
||||
asinh(x.z),
|
||||
asinh(x.w));
|
||||
}
|
||||
|
||||
// acosh
|
||||
template <typename genType>
|
||||
inline genType acosh
|
||||
// acosh
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType acosh
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'acosh' only accept floating-point input");
|
||||
|
||||
if(x < genType(1))
|
||||
return genType(0);
|
||||
return log(x + sqrt(x * x - genType(1)));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> acosh
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
acosh(x.x),
|
||||
acosh(x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> acosh
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
acosh(x.x),
|
||||
acosh(x.y),
|
||||
acosh(x.z));
|
||||
}
|
||||
VECTORIZE_VEC(acosh)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> acosh
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
acosh(x.x),
|
||||
acosh(x.y),
|
||||
acosh(x.z),
|
||||
acosh(x.w));
|
||||
}
|
||||
|
||||
// atanh
|
||||
template <typename genType>
|
||||
inline genType atanh
|
||||
// atanh
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType atanh
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'atanh' only accept floating-point input");
|
||||
|
||||
if(abs(x) >= genType(1))
|
||||
return 0;
|
||||
return genType(0.5) * log((genType(1) + x) / (genType(1) - x));
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec2<T> atanh
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
atanh(x.x),
|
||||
atanh(x.y));
|
||||
}
|
||||
VECTORIZE_VEC(atanh)
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> atanh
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
atanh(x.x),
|
||||
atanh(x.y),
|
||||
atanh(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> atanh
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
atanh(x.x),
|
||||
atanh(x.y),
|
||||
atanh(x.z),
|
||||
atanh(x.w));
|
||||
}
|
||||
|
||||
}//namespace trigonometric
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
||||
|
||||
@@ -1,200 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-03
|
||||
// Updated : 2008-09-09
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_vector_relational.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_vector_relational
|
||||
#define glm_core_func_vector_relational
|
||||
|
||||
#include "_detail.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_vector_relational();
|
||||
}//namespace test
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define vector relational functions from Section 8.3 of GLSL 1.30.8 specification.
|
||||
//! Included in glm namespace.
|
||||
namespace vector_relational
|
||||
{
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! Returns the component-wise comparison result of x < y.
|
||||
//! (From GLSL 1.30.08 specification, section 8.6)
|
||||
template <typename T, template <typename> class vecType>
|
||||
inline typename vecType<T>::bool_type lessThan
|
||||
(
|
||||
vecType<T> const & x,
|
||||
vecType<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
|
||||
"Invalid template instantiation of 'lessThan', GLM vector types required");
|
||||
GLM_STATIC_ASSERT(detail::is_bool<T>::_NO,
|
||||
"Invalid template instantiation of 'lessThan', GLM vector types required floating-point or integer value types vectors");
|
||||
|
||||
typename vecType<bool>::bool_type Result(vecType<bool>::null);
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result[i] = x[i] < y[i];
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns the component-wise comparison of result x <= y.
|
||||
//! (From GLSL 1.30.08 specification, section 8.6)
|
||||
template <typename T, template <typename> class vecType>
|
||||
inline typename vecType<T>::bool_type lessThanEqual
|
||||
(
|
||||
vecType<T> const & x,
|
||||
vecType<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
|
||||
"Invalid template instantiation of 'lessThanEqual', GLM vector types required");
|
||||
GLM_STATIC_ASSERT(detail::is_bool<T>::_NO,
|
||||
"Invalid template instantiation of 'lessThanEqual', GLM vector types required floating-point or integer value types vectors");
|
||||
|
||||
typename vecType<bool>::bool_type Result(vecType<bool>::null);
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result[i] = x[i] <= y[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns the component-wise comparison of result x > y.
|
||||
//! (From GLSL 1.30.08 specification, section 8.6)
|
||||
template <typename T, template <typename> class vecType>
|
||||
inline typename vecType<T>::bool_type greaterThan
|
||||
(
|
||||
vecType<T> const & x,
|
||||
vecType<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
|
||||
"Invalid template instantiation of 'greaterThan', GLM vector types required");
|
||||
GLM_STATIC_ASSERT(detail::is_bool<T>::_NO,
|
||||
"Invalid template instantiation of 'greaterThan', GLM vector types required floating-point or integer value types vectors");
|
||||
|
||||
typename vecType<bool>::bool_type Result(vecType<bool>::null);
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result[i] = x[i] > y[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns the component-wise comparison of result x >= y.
|
||||
//! (From GLSL 1.30.08 specification, section 8.6)
|
||||
template <typename T, template <typename> class vecType>
|
||||
inline typename vecType<T>::bool_type greaterThanEqual
|
||||
(
|
||||
vecType<T> const & x,
|
||||
vecType<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
|
||||
"Invalid template instantiation of 'greaterThanEqual', GLM vector types required");
|
||||
GLM_STATIC_ASSERT(detail::is_bool<T>::_NO,
|
||||
"Invalid template instantiation of 'greaterThanEqual', GLM vector types required floating-point or integer value types vectors");
|
||||
|
||||
typename vecType<bool>::bool_type Result(vecType<bool>::null);
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result[i] = x[i] >= y[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns the component-wise comparison of result x == y.
|
||||
//! (From GLSL 1.30.08 specification, section 8.6)
|
||||
template <typename T, template <typename> class vecType>
|
||||
inline typename vecType<T>::bool_type equal
|
||||
(
|
||||
vecType<T> const & x,
|
||||
vecType<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
|
||||
"Invalid template instantiation of 'equal', GLM vector types required");
|
||||
|
||||
typename vecType<bool>::bool_type Result(vecType<bool>::null);
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result[i] = x[i] == y[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns the component-wise comparison of result x != y.
|
||||
//! (From GLSL 1.30.08 specification, section 8.6)
|
||||
template <typename T, template <typename> class vecType>
|
||||
inline typename vecType<T>::bool_type notEqual
|
||||
(
|
||||
vecType<T> const & x,
|
||||
vecType<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
|
||||
"Invalid template instantiation of 'notEqual', GLM vector types required");
|
||||
|
||||
typename vecType<bool>::bool_type Result(vecType<bool>::null);
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result[i] = x[i] != y[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns true if any component of x is true.
|
||||
//! (From GLSL 1.30.08 specification, section 8.6)
|
||||
template <template <typename> class vecType>
|
||||
inline bool any(vecType<bool> const & v)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<bool> >::_YES,
|
||||
"Invalid template instantiation of 'any', GLM boolean vector types required");
|
||||
|
||||
bool Result = false;
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result = Result || v[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns true if all components of x are true.
|
||||
//! (From GLSL 1.30.08 specification, section 8.6)
|
||||
template <template <typename> class vecType>
|
||||
inline bool all(vecType<bool> const & v)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<bool> >::_YES,
|
||||
"Invalid template instantiation of 'all', GLM boolean vector types required");
|
||||
|
||||
bool Result = true;
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result = Result && v[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns the component-wise logical complement of x.
|
||||
//! (From GLSL 1.30.08 specification, section 8.6)
|
||||
template <template <typename> class vecType>
|
||||
inline vecType<bool> not_(vecType<bool> const & v)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<bool> >::_YES,
|
||||
"Invalid template instantiation of 'not_', GLM vector types required");
|
||||
|
||||
typename vecType<bool>::bool_type Result(vecType<bool>::null);
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result[i] = !v[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace vector_relational
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::vector_relational;
|
||||
}//namespace glm
|
||||
|
||||
#include "func_vector_relational.inl"
|
||||
|
||||
#endif//glm_core_func_vector_relational
|
||||
@@ -1,20 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-03
|
||||
// Updated : 2008-09-14
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_vector_relational.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace vector_relational{
|
||||
|
||||
}//namespace vector_relational
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
||||
|
||||
@@ -1,11 +1,30 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-14
|
||||
// Updated : 2008-08-14
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/hint.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/hint.hpp
|
||||
/// @date 2008-08-14 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type
|
||||
#define glm_core_type
|
||||
@@ -16,6 +35,6 @@ namespace glm
|
||||
class dont_care {};
|
||||
class nicest {};
|
||||
class fastest {};
|
||||
};
|
||||
}//namespace glm
|
||||
|
||||
#endif//glm_core_type
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-05-11
|
||||
// Updated : 2009-05-11
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_common.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_detail_intrinsic_common
|
||||
#define glm_detail_intrinsic_common
|
||||
|
||||
#include "setup.hpp"
|
||||
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
|
||||
# error "SSE2 instructions not supported or enabled"
|
||||
#else
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
__m128 sse_abs_ps(__m128 x);
|
||||
|
||||
__m128 sse_sgn_ps(__m128 x);
|
||||
|
||||
//floor
|
||||
__m128 sse_flr_ps(__m128 v);
|
||||
|
||||
//trunc
|
||||
__m128 sse_trc_ps(__m128 v);
|
||||
|
||||
//round
|
||||
__m128 sse_nd_ps(__m128 v);
|
||||
|
||||
//roundEven
|
||||
__m128 sse_rde_ps(__m128 v);
|
||||
|
||||
__m128 sse_rnd_ps(__m128 x);
|
||||
|
||||
__m128 sse_ceil_ps(__m128 v);
|
||||
|
||||
__m128 sse_frc_ps(__m128 x);
|
||||
|
||||
__m128 sse_mod_ps(__m128 x, __m128 y);
|
||||
|
||||
__m128 sse_modf_ps(__m128 x, __m128i & i);
|
||||
|
||||
//inline __m128 sse_min_ps(__m128 x, __m128 y)
|
||||
|
||||
//inline __m128 sse_max_ps(__m128 x, __m128 y)
|
||||
|
||||
__m128 sse_clp_ps(__m128 v, __m128 minVal, __m128 maxVal);
|
||||
|
||||
__m128 sse_mix_ps(__m128 v1, __m128 v2, __m128 a);
|
||||
|
||||
__m128 sse_stp_ps(__m128 edge, __m128 x);
|
||||
|
||||
__m128 sse_ssp_ps(__m128 edge0, __m128 edge1, __m128 x);
|
||||
|
||||
__m128 sse_nan_ps(__m128 x);
|
||||
|
||||
__m128 sse_inf_ps(__m128 x);
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#include "intrinsic_common.inl"
|
||||
|
||||
#endif//GLM_ARCH
|
||||
#endif//glm_detail_intrinsic_common
|
||||
@@ -1,273 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-05-08
|
||||
// Updated : 2009-05-08
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_common.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail{
|
||||
|
||||
union ieee754_QNAN
|
||||
{
|
||||
const float f;
|
||||
struct
|
||||
{
|
||||
const unsigned int mantissa:23, exp:8, sign:1;
|
||||
};
|
||||
|
||||
ieee754_QNAN() : f(0.0), mantissa(0x7FFFFF), exp(0xFF), sign(0x0) {}
|
||||
};
|
||||
|
||||
static const __m128 zero = _mm_setzero_ps();
|
||||
static const __m128 one = _mm_set_ps1(1.0f);
|
||||
static const __m128 minus_one = _mm_set_ps1(-1.0f);
|
||||
static const __m128 two = _mm_set_ps1(2.0f);
|
||||
static const __m128 three = _mm_set_ps1(3.0f);
|
||||
static const __m128 pi = _mm_set_ps1(3.1415926535897932384626433832795f);
|
||||
static const __m128 hundred_eighty = _mm_set_ps1(180.f);
|
||||
static const __m128 pi_over_hundred_eighty = _mm_set_ps1(0.017453292519943295769236907684886f);
|
||||
static const __m128 hundred_eighty_over_pi = _mm_set_ps1(57.295779513082320876798154814105f);
|
||||
|
||||
static const ieee754_QNAN absMask;
|
||||
static const __m128 abs4Mask = _mm_set_ps1(absMask.f);
|
||||
|
||||
static const __m128 _epi32_sign_mask = _mm_castsi128_ps(_mm_set1_epi32(0x80000000));
|
||||
//static const __m128 _epi32_inv_sign_mask = _mm_castsi128_ps(_mm_set1_epi32(0x7FFFFFFF));
|
||||
//static const __m128 _epi32_mant_mask = _mm_castsi128_ps(_mm_set1_epi32(0x7F800000));
|
||||
//static const __m128 _epi32_inv_mant_mask = _mm_castsi128_ps(_mm_set1_epi32(0x807FFFFF));
|
||||
//static const __m128 _epi32_min_norm_pos = _mm_castsi128_ps(_mm_set1_epi32(0x00800000));
|
||||
static const __m128 _epi32_0 = _mm_set_ps1(0);
|
||||
static const __m128 _epi32_1 = _mm_set_ps1(1);
|
||||
static const __m128 _epi32_2 = _mm_set_ps1(2);
|
||||
static const __m128 _epi32_3 = _mm_set_ps1(3);
|
||||
static const __m128 _epi32_4 = _mm_set_ps1(4);
|
||||
static const __m128 _epi32_5 = _mm_set_ps1(5);
|
||||
static const __m128 _epi32_6 = _mm_set_ps1(6);
|
||||
static const __m128 _epi32_7 = _mm_set_ps1(7);
|
||||
static const __m128 _epi32_8 = _mm_set_ps1(8);
|
||||
static const __m128 _epi32_9 = _mm_set_ps1(9);
|
||||
static const __m128 _epi32_127 = _mm_set_ps1(127);
|
||||
//static const __m128 _epi32_ninf = _mm_castsi128_ps(_mm_set1_epi32(0xFF800000));
|
||||
//static const __m128 _epi32_pinf = _mm_castsi128_ps(_mm_set1_epi32(0x7F800000));
|
||||
|
||||
static const __m128 _ps_1_3 = _mm_set_ps1(0.33333333333333333333333333333333f);
|
||||
static const __m128 _ps_0p5 = _mm_set_ps1(0.5f);
|
||||
static const __m128 _ps_1 = _mm_set_ps1(1.0f);
|
||||
static const __m128 _ps_m1 = _mm_set_ps1(-1.0f);
|
||||
static const __m128 _ps_2 = _mm_set_ps1(2.0f);
|
||||
static const __m128 _ps_3 = _mm_set_ps1(3.0f);
|
||||
static const __m128 _ps_127 = _mm_set_ps1(127.0f);
|
||||
static const __m128 _ps_255 = _mm_set_ps1(255.0f);
|
||||
static const __m128 _ps_2pow23 = _mm_set_ps1(8388608.0f);
|
||||
|
||||
static const __m128 _ps_1_0_0_0 = _mm_set_ps(1.0f, 0.0f, 0.0f, 0.0f);
|
||||
static const __m128 _ps_0_1_0_0 = _mm_set_ps(0.0f, 1.0f, 0.0f, 0.0f);
|
||||
static const __m128 _ps_0_0_1_0 = _mm_set_ps(0.0f, 0.0f, 1.0f, 0.0f);
|
||||
static const __m128 _ps_0_0_0_1 = _mm_set_ps(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
|
||||
static const __m128 _ps_pi = _mm_set_ps1(3.1415926535897932384626433832795f);
|
||||
static const __m128 _ps_pi2 = _mm_set_ps1(6.283185307179586476925286766560f);
|
||||
static const __m128 _ps_2_pi = _mm_set_ps1(0.63661977236758134307553505349006f);
|
||||
static const __m128 _ps_pi_2 = _mm_set_ps1(1.5707963267948966192313216916398f);
|
||||
static const __m128 _ps_4_pi = _mm_set_ps1(1.2732395447351626861510701069801f);
|
||||
static const __m128 _ps_pi_4 = _mm_set_ps1(0.78539816339744830961566084581988f);
|
||||
|
||||
static const __m128 _ps_sincos_p0 = _mm_set_ps1(0.15707963267948963959e1f);
|
||||
static const __m128 _ps_sincos_p1 = _mm_set_ps1(-0.64596409750621907082e0f);
|
||||
static const __m128 _ps_sincos_p2 = _mm_set_ps1(0.7969262624561800806e-1f);
|
||||
static const __m128 _ps_sincos_p3 = _mm_set_ps1(-0.468175413106023168e-2f);
|
||||
static const __m128 _ps_tan_p0 = _mm_set_ps1(-1.79565251976484877988e7f);
|
||||
static const __m128 _ps_tan_p1 = _mm_set_ps1(1.15351664838587416140e6f);
|
||||
static const __m128 _ps_tan_p2 = _mm_set_ps1(-1.30936939181383777646e4f);
|
||||
static const __m128 _ps_tan_q0 = _mm_set_ps1(-5.38695755929454629881e7f);
|
||||
static const __m128 _ps_tan_q1 = _mm_set_ps1(2.50083801823357915839e7f);
|
||||
static const __m128 _ps_tan_q2 = _mm_set_ps1(-1.32089234440210967447e6f);
|
||||
static const __m128 _ps_tan_q3 = _mm_set_ps1(1.36812963470692954678e4f);
|
||||
static const __m128 _ps_tan_poleval = _mm_set_ps1(3.68935e19f);
|
||||
static const __m128 _ps_atan_t0 = _mm_set_ps1(-0.91646118527267623468e-1f);
|
||||
static const __m128 _ps_atan_t1 = _mm_set_ps1(-0.13956945682312098640e1f);
|
||||
static const __m128 _ps_atan_t2 = _mm_set_ps1(-0.94393926122725531747e2f);
|
||||
static const __m128 _ps_atan_t3 = _mm_set_ps1(0.12888383034157279340e2f);
|
||||
static const __m128 _ps_atan_s0 = _mm_set_ps1(0.12797564625607904396e1f);
|
||||
static const __m128 _ps_atan_s1 = _mm_set_ps1(0.21972168858277355914e1f);
|
||||
static const __m128 _ps_atan_s2 = _mm_set_ps1(0.68193064729268275701e1f);
|
||||
static const __m128 _ps_atan_s3 = _mm_set_ps1(0.28205206687035841409e2f);
|
||||
|
||||
static const __m128 _ps_exp_hi = _mm_set_ps1(88.3762626647949f);
|
||||
static const __m128 _ps_exp_lo = _mm_set_ps1(-88.3762626647949f);
|
||||
static const __m128 _ps_exp_rln2 = _mm_set_ps1(1.4426950408889634073599f);
|
||||
static const __m128 _ps_exp_p0 = _mm_set_ps1(1.26177193074810590878e-4f);
|
||||
static const __m128 _ps_exp_p1 = _mm_set_ps1(3.02994407707441961300e-2f);
|
||||
static const __m128 _ps_exp_q0 = _mm_set_ps1(3.00198505138664455042e-6f);
|
||||
static const __m128 _ps_exp_q1 = _mm_set_ps1(2.52448340349684104192e-3f);
|
||||
static const __m128 _ps_exp_q2 = _mm_set_ps1(2.27265548208155028766e-1f);
|
||||
static const __m128 _ps_exp_q3 = _mm_set_ps1(2.00000000000000000009e0f);
|
||||
static const __m128 _ps_exp_c1 = _mm_set_ps1(6.93145751953125e-1f);
|
||||
static const __m128 _ps_exp_c2 = _mm_set_ps1(1.42860682030941723212e-6f);
|
||||
static const __m128 _ps_exp2_hi = _mm_set_ps1(127.4999961853f);
|
||||
static const __m128 _ps_exp2_lo = _mm_set_ps1(-127.4999961853f);
|
||||
static const __m128 _ps_exp2_p0 = _mm_set_ps1(2.30933477057345225087e-2f);
|
||||
static const __m128 _ps_exp2_p1 = _mm_set_ps1(2.02020656693165307700e1f);
|
||||
static const __m128 _ps_exp2_p2 = _mm_set_ps1(1.51390680115615096133e3f);
|
||||
static const __m128 _ps_exp2_q0 = _mm_set_ps1(2.33184211722314911771e2f);
|
||||
static const __m128 _ps_exp2_q1 = _mm_set_ps1(4.36821166879210612817e3f);
|
||||
static const __m128 _ps_log_p0 = _mm_set_ps1(-7.89580278884799154124e-1f);
|
||||
static const __m128 _ps_log_p1 = _mm_set_ps1(1.63866645699558079767e1f);
|
||||
static const __m128 _ps_log_p2 = _mm_set_ps1(-6.41409952958715622951e1f);
|
||||
static const __m128 _ps_log_q0 = _mm_set_ps1(-3.56722798256324312549e1f);
|
||||
static const __m128 _ps_log_q1 = _mm_set_ps1(3.12093766372244180303e2f);
|
||||
static const __m128 _ps_log_q2 = _mm_set_ps1(-7.69691943550460008604e2f);
|
||||
static const __m128 _ps_log_c0 = _mm_set_ps1(0.693147180559945f);
|
||||
static const __m128 _ps_log2_c0 = _mm_set_ps1(1.44269504088896340735992f);
|
||||
|
||||
inline __m128 sse_abs_ps(__m128 x)
|
||||
{
|
||||
return _mm_and_ps(glm::detail::abs4Mask, x);
|
||||
}
|
||||
|
||||
inline __m128 sse_sgn_ps(__m128 x)
|
||||
{
|
||||
__m128 Neg = _mm_set1_ps(-1.0f);
|
||||
__m128 Pos = _mm_set1_ps(1.0f);
|
||||
|
||||
__m128 Cmp0 = _mm_cmplt_ps(x, zero);
|
||||
__m128 Cmp1 = _mm_cmpgt_ps(x, zero);
|
||||
|
||||
__m128 And0 = _mm_and_ps(Cmp0, Neg);
|
||||
__m128 And1 = _mm_and_ps(Cmp1, Pos);
|
||||
|
||||
return _mm_or_ps(And0, And1);
|
||||
}
|
||||
|
||||
//floor
|
||||
inline __m128 sse_flr_ps(__m128 x)
|
||||
{
|
||||
__m128 rnd0 = sse_rnd_ps(x);
|
||||
__m128 cmp0 = _mm_cmplt_ps(x, rnd0);
|
||||
__m128 and0 = _mm_and_ps(cmp0, glm::detail::_ps_1);
|
||||
__m128 sub0 = _mm_sub_ps(rnd0, and0);
|
||||
return sub0;
|
||||
}
|
||||
|
||||
//trunc
|
||||
/*
|
||||
inline __m128 _mm_trc_ps(__m128 v)
|
||||
{
|
||||
return __m128();
|
||||
}
|
||||
*/
|
||||
//round
|
||||
inline __m128 sse_rnd_ps(__m128 x)
|
||||
{
|
||||
__m128 and0 = _mm_and_ps(glm::detail::_epi32_sign_mask, x);
|
||||
__m128 or0 = _mm_or_ps(and0, glm::detail::_ps_2pow23);
|
||||
__m128 add0 = _mm_add_ps(x, or0);
|
||||
__m128 sub0 = _mm_sub_ps(add0, or0);
|
||||
return sub0;
|
||||
}
|
||||
|
||||
//roundEven
|
||||
inline __m128 sse_rde_ps(__m128 v)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
inline __m128 sse_ceil_ps(__m128 x)
|
||||
{
|
||||
__m128 rnd0 = sse_rnd_ps(x);
|
||||
__m128 cmp0 = _mm_cmpgt_ps(x, rnd0);
|
||||
__m128 and0 = _mm_and_ps(cmp0, glm::detail::_ps_1);
|
||||
__m128 add0 = _mm_add_ps(rnd0, and0);
|
||||
return add0;
|
||||
}
|
||||
|
||||
inline __m128 sse_frc_ps(__m128 x)
|
||||
{
|
||||
__m128 flr0 = sse_flr_ps(x);
|
||||
__m128 sub0 = _mm_sub_ps(x, flr0);
|
||||
return sub0;
|
||||
}
|
||||
|
||||
inline __m128 sse_mod_ps(__m128 x, __m128 y)
|
||||
{
|
||||
__m128 div0 = _mm_div_ps(x, y);
|
||||
__m128 flr0 = sse_flr_ps(div0);
|
||||
__m128 mul0 = _mm_mul_ps(y, flr0);
|
||||
__m128 sub0 = _mm_sub_ps(x, mul0);
|
||||
return sub0;
|
||||
}
|
||||
|
||||
inline __m128 sse_modf_ps(__m128 x, __m128i & i)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//inline __m128 _mm_min_ps(__m128 x, __m128 y)
|
||||
|
||||
//inline __m128 _mm_max_ps(__m128 x, __m128 y)
|
||||
|
||||
inline __m128 sse_clp_ps(__m128 v, __m128 minVal, __m128 maxVal)
|
||||
{
|
||||
__m128 min0 = _mm_min_ps(v, maxVal);
|
||||
__m128 max0 = _mm_max_ps(min0, minVal);
|
||||
return max0;
|
||||
}
|
||||
|
||||
inline __m128 sse_mix_ps(__m128 v1, __m128 v2, __m128 a)
|
||||
{
|
||||
__m128 sub0 = _mm_sub_ps(glm::detail::one, a);
|
||||
__m128 mul0 = _mm_mul_ps(v1, sub0);
|
||||
__m128 mul1 = _mm_mul_ps(v2, a);
|
||||
__m128 add0 = _mm_add_ps(mul0, mul1);
|
||||
return add0;
|
||||
}
|
||||
|
||||
inline __m128 sse_stp_ps(__m128 edge, __m128 x)
|
||||
{
|
||||
__m128 cmp = _mm_cmple_ps(x, edge);
|
||||
if(_mm_movemask_ps(cmp) == 0)
|
||||
return glm::detail::one;
|
||||
else
|
||||
return glm::detail::zero;
|
||||
}
|
||||
|
||||
inline __m128 sse_ssp_ps(__m128 edge0, __m128 edge1, __m128 x)
|
||||
{
|
||||
__m128 sub0 = _mm_sub_ps(x, edge0);
|
||||
__m128 sub1 = _mm_sub_ps(edge1, edge0);
|
||||
__m128 div0 = _mm_sub_ps(sub0, sub1);
|
||||
__m128 clp0 = sse_clp_ps(div0, glm::detail::zero, glm::detail::one);
|
||||
__m128 mul0 = _mm_mul_ps(glm::detail::two, clp0);
|
||||
__m128 sub2 = _mm_sub_ps(glm::detail::three, mul0);
|
||||
__m128 mul1 = _mm_mul_ps(clp0, clp0);
|
||||
__m128 mul2 = _mm_mul_ps(mul1, sub2);
|
||||
return mul2;
|
||||
}
|
||||
|
||||
inline __m128 sse_nan_ps(__m128 x)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
inline __m128 sse_inf_ps(__m128 x)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// SSE scalar reciprocal sqrt using rsqrt op, plus one Newton-Rhaphson iteration
|
||||
// By Elan Ruskin, http://assemblyrequired.crashworks.org/
|
||||
inline __m128 sse_sqrt_wip_ss(__m128 const & x)
|
||||
{
|
||||
__m128 recip = _mm_rsqrt_ss(x); // "estimate" opcode
|
||||
const static __m128 three = {3, 3, 3, 3}; // aligned consts for fast load
|
||||
const static __m128 half = {0.5,0.5,0.5,0.5};
|
||||
__m128 halfrecip = _mm_mul_ss(half, recip);
|
||||
__m128 threeminus_xrr = _mm_sub_ss(three, _mm_mul_ss(x, _mm_mul_ss (recip, recip)));
|
||||
return _mm_mul_ss( halfrecip, threeminus_xrr);
|
||||
}
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glms
|
||||
@@ -1,60 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-05-11
|
||||
// Updated : 2009-05-11
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_exponential.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_detail_intrinsic_exponential
|
||||
#define glm_detail_intrinsic_exponential
|
||||
|
||||
#include "setup.hpp"
|
||||
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
|
||||
# error "SSE2 instructions not supported or enabled"
|
||||
#else
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
/*
|
||||
inline __m128 sse_rsqrt_nr_ss(__m128 const x)
|
||||
{
|
||||
__m128 recip = _mm_rsqrt_ss( x ); // "estimate" opcode
|
||||
const static __m128 three = { 3, 3, 3, 3 }; // aligned consts for fast load
|
||||
const static __m128 half = { 0.5,0.5,0.5,0.5 };
|
||||
__m128 halfrecip = _mm_mul_ss( half, recip );
|
||||
__m128 threeminus_xrr = _mm_sub_ss( three, _mm_mul_ss( x, _mm_mul_ss ( recip, recip ) ) );
|
||||
return _mm_mul_ss( halfrecip, threeminus_xrr );
|
||||
}
|
||||
|
||||
inline __m128 sse_normalize_fast_ps( float * RESTRICT vOut, float * RESTRICT vIn )
|
||||
{
|
||||
__m128 x = _mm_load_ss(&vIn[0]);
|
||||
__m128 y = _mm_load_ss(&vIn[1]);
|
||||
__m128 z = _mm_load_ss(&vIn[2]);
|
||||
|
||||
const __m128 l = // compute x*x + y*y + z*z
|
||||
_mm_add_ss(
|
||||
_mm_add_ss( _mm_mul_ss(x,x),
|
||||
_mm_mul_ss(y,y)
|
||||
),
|
||||
_mm_mul_ss( z, z )
|
||||
);
|
||||
|
||||
|
||||
const __m128 rsqt = _mm_rsqrt_nr_ss( l );
|
||||
_mm_store_ss( &vOut[0] , _mm_mul_ss( rsqt, x ) );
|
||||
_mm_store_ss( &vOut[1] , _mm_mul_ss( rsqt, y ) );
|
||||
_mm_store_ss( &vOut[2] , _mm_mul_ss( rsqt, z ) );
|
||||
|
||||
return _mm_mul_ss( l , rsqt );
|
||||
}
|
||||
*/
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#endif//GLM_ARCH
|
||||
#endif//glm_detail_intrinsic_exponential
|
||||
@@ -1,57 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-05-08
|
||||
// Updated : 2009-05-08
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_geometric.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_intrinsic_geometric
|
||||
#define glm_core_intrinsic_geometric
|
||||
|
||||
#include "setup.hpp"
|
||||
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
|
||||
# error "SSE2 instructions not supported or enabled"
|
||||
#else
|
||||
|
||||
#include "intrinsic_common.hpp"
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
//length
|
||||
__m128 sse_len_ps(__m128 x);
|
||||
|
||||
//distance
|
||||
__m128 sse_dst_ps(__m128 p0, __m128 p1);
|
||||
|
||||
//dot
|
||||
__m128 sse_dot_ps(__m128 v1, __m128 v2);
|
||||
|
||||
// SSE1
|
||||
__m128 sse_dot_ss(__m128 v1, __m128 v2);
|
||||
|
||||
//cross
|
||||
__m128 sse_xpd_ps(__m128 v1, __m128 v2);
|
||||
|
||||
//normalize
|
||||
__m128 sse_nrm_ps(__m128 v);
|
||||
|
||||
//faceforward
|
||||
__m128 sse_ffd_ps(__m128 N, __m128 I, __m128 Nref);
|
||||
|
||||
//reflect
|
||||
__m128 sse_rfe_ps(__m128 I, __m128 N);
|
||||
|
||||
//refract
|
||||
__m128 sse_rfa_ps(__m128 I, __m128 N, __m128 eta);
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#include "intrinsic_geometric.inl"
|
||||
|
||||
#endif//GLM_ARCH
|
||||
#endif//glm_core_intrinsic_geometric
|
||||
@@ -1,123 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-05-08
|
||||
// Updated : 2009-05-08
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_geometric.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail{
|
||||
|
||||
//length
|
||||
inline __m128 sse_len_ps(__m128 x)
|
||||
{
|
||||
__m128 dot0 = sse_dot_ps(x, x);
|
||||
__m128 sqt0 = _mm_sqrt_ps(dot0);
|
||||
return sqt0;
|
||||
}
|
||||
|
||||
//distance
|
||||
inline __m128 sse_dst_ps(__m128 p0, __m128 p1)
|
||||
{
|
||||
__m128 sub0 = _mm_sub_ps(p0, p1);
|
||||
__m128 len0 = sse_len_ps(sub0);
|
||||
return len0;
|
||||
}
|
||||
|
||||
//dot
|
||||
inline __m128 sse_dot_ps(__m128 v1, __m128 v2)
|
||||
{
|
||||
__m128 mul0 = _mm_mul_ps(v1, v2);
|
||||
__m128 swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1));
|
||||
__m128 add0 = _mm_add_ps(mul0, swp0);
|
||||
__m128 swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3));
|
||||
__m128 add1 = _mm_add_ps(add0, swp1);
|
||||
return add1;
|
||||
}
|
||||
|
||||
// SSE1
|
||||
inline __m128 sse_dot_ss(__m128 v1, __m128 v2)
|
||||
{
|
||||
__m128 mul0 = _mm_mul_ps(v1, v2);
|
||||
__m128 mov0 = _mm_movehl_ps(mul0, mul0);
|
||||
__m128 add0 = _mm_add_ps(mov0, mul0);
|
||||
__m128 swp1 = _mm_shuffle_ps(add0, add0, 1);
|
||||
__m128 add1 = _mm_add_ss(add0, swp1);
|
||||
return add1;
|
||||
}
|
||||
|
||||
//cross
|
||||
inline __m128 sse_xpd_ps(__m128 v1, __m128 v2)
|
||||
{
|
||||
__m128 swp0 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1));
|
||||
__m128 swp1 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 1, 0, 2));
|
||||
__m128 swp2 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1));
|
||||
__m128 swp3 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 1, 0, 2));
|
||||
__m128 mul0 = _mm_mul_ps(swp0, swp3);
|
||||
__m128 mul1 = _mm_mul_ps(swp1, swp2);
|
||||
__m128 sub0 = _mm_sub_ps(mul0, mul1);
|
||||
return sub0;
|
||||
}
|
||||
|
||||
//normalize
|
||||
inline __m128 sse_nrm_ps(__m128 v)
|
||||
{
|
||||
__m128 dot0 = sse_dot_ps(v, v);
|
||||
__m128 isr0 = _mm_rsqrt_ps(dot0);
|
||||
__m128 mul0 = _mm_mul_ps(v, isr0);
|
||||
return mul0;
|
||||
}
|
||||
|
||||
//faceforward
|
||||
inline __m128 sse_ffd_ps(__m128 N, __m128 I, __m128 Nref)
|
||||
{
|
||||
//__m128 dot0 = _mm_dot_ps(v, v);
|
||||
//__m128 neg0 = _mm_neg_ps(N);
|
||||
//__m128 sgn0 = _mm_sgn_ps(dot0);
|
||||
//__m128 mix0 = _mm_mix_ps(N, neg0, sgn0);
|
||||
//return mix0;
|
||||
|
||||
__m128 dot0 = sse_dot_ps(Nref, I);
|
||||
__m128 sgn0 = sse_sgn_ps(dot0);
|
||||
__m128 mul0 = _mm_mul_ps(sgn0, glm::detail::minus_one);
|
||||
__m128 mul1 = _mm_mul_ps(N, mul0);
|
||||
return mul1;
|
||||
}
|
||||
|
||||
//reflect
|
||||
inline __m128 sse_rfe_ps(__m128 I, __m128 N)
|
||||
{
|
||||
__m128 dot0 = sse_dot_ps(N, I);
|
||||
__m128 mul0 = _mm_mul_ps(N, dot0);
|
||||
__m128 mul1 = _mm_mul_ps(mul0, glm::detail::two);
|
||||
__m128 sub0 = _mm_sub_ps(I, mul1);
|
||||
return sub0;
|
||||
}
|
||||
|
||||
//refract
|
||||
inline __m128 sse_rfa_ps(__m128 I, __m128 N, __m128 eta)
|
||||
{
|
||||
__m128 dot0 = sse_dot_ps(N, I);
|
||||
__m128 mul0 = _mm_mul_ps(eta, eta);
|
||||
__m128 mul1 = _mm_mul_ps(dot0, dot0);
|
||||
__m128 sub0 = _mm_sub_ps(glm::detail::one, mul0);
|
||||
__m128 sub1 = _mm_sub_ps(glm::detail::one, mul1);
|
||||
__m128 mul2 = _mm_mul_ps(sub0, sub1);
|
||||
|
||||
if(_mm_movemask_ps(_mm_cmplt_ss(mul2, glm::detail::zero)) == 0)
|
||||
return glm::detail::zero;
|
||||
|
||||
__m128 sqt0 = _mm_sqrt_ps(mul2);
|
||||
__m128 mul3 = _mm_mul_ps(eta, dot0);
|
||||
__m128 add0 = _mm_add_ps(mul3, sqt0);
|
||||
__m128 mul4 = _mm_mul_ps(add0, N);
|
||||
__m128 mul5 = _mm_mul_ps(eta, I);
|
||||
__m128 sub2 = _mm_sub_ps(mul5, mul4);
|
||||
|
||||
return sub2;
|
||||
}
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
@@ -1,50 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-06-05
|
||||
// Updated : 2009-06-05
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_common.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_detail_intrinsic_matrix
|
||||
#define glm_detail_intrinsic_matrix
|
||||
|
||||
#include "setup.hpp"
|
||||
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
|
||||
# error "SSE2 instructions not supported or enabled"
|
||||
#else
|
||||
|
||||
#include "intrinsic_geometric.hpp"
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
void sse_add_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
|
||||
|
||||
void sse_sub_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
|
||||
|
||||
__m128 sse_mul_ps(__m128 m[4], __m128 v);
|
||||
|
||||
__m128 sse_mul_ps(__m128 v, __m128 m[4]);
|
||||
|
||||
void sse_mul_ps(__m128 const in1[4], __m128 const in2[4], __m128 out[4]);
|
||||
|
||||
void sse_transpose_ps(__m128 const in[4], __m128 out[4]);
|
||||
|
||||
void sse_inverse_ps(__m128 const in[4], __m128 out[4]);
|
||||
|
||||
void sse_rotate_ps(__m128 const in[4], float Angle, float const v[3], __m128 out[4]);
|
||||
|
||||
__m128 sse_det_ps(__m128 const m[4]);
|
||||
|
||||
__m128 sse_slow_det_ps(__m128 const m[4]);
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#include "intrinsic_matrix.inl"
|
||||
|
||||
#endif//GLM_ARCH
|
||||
#endif//glm_detail_intrinsic_matrix
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,29 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-06-09
|
||||
// Updated : 2009-06-09
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_trigonometric.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_detail_intrinsic_trigonometric
|
||||
#define glm_detail_intrinsic_trigonometric
|
||||
|
||||
#include "setup.hpp"
|
||||
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
|
||||
# error "SSE2 instructions not supported or enabled"
|
||||
#else
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#include "intrinsic_trigonometric.inl"
|
||||
|
||||
#endif//GLM_ARCH
|
||||
#endif//glm_detail_intrinsic_trigonometric
|
||||
@@ -1,29 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-06-09
|
||||
// Updated : 2009-06-09
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_vector_relational.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_detail_intrinsic_vector_relational
|
||||
#define glm_detail_intrinsic_vector_relational
|
||||
|
||||
#include "setup.hpp"
|
||||
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
|
||||
# error "SSE2 instructions not supported or enabled"
|
||||
#else
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#include "intrinsic_vector_relational.inl"
|
||||
|
||||
#endif//GLM_ARCH
|
||||
#endif//glm_detail_intrinsic_vector_relational
|
||||
@@ -1,347 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-06-09
|
||||
// Updated : 2009-06-09
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_vector_relational.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
//// lessThan
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec2<valType>::bool_type lessThan
|
||||
//(
|
||||
// detail::tvec2<valType> const & x,
|
||||
// detail::tvec2<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec2<bool>::bool_type(x.x < y.x, x.y < y.y);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec3<valType>::bool_type lessThan
|
||||
//(
|
||||
// detail::tvec3<valType> const & x,
|
||||
// detail::tvec3<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec3<bool>::bool_type(x.x < y.x, x.y < y.y, x.z < y.z);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec4<valType>::bool_type lessThan
|
||||
//(
|
||||
// detail::tvec4<valType> const & x,
|
||||
// detail::tvec4<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec4<bool>::bool_type(x.x < y.x, x.y < y.y, x.z < y.z, x.w < y.w);
|
||||
//}
|
||||
//
|
||||
//// lessThanEqual
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec2<valType>::bool_type lessThanEqual
|
||||
//(
|
||||
// detail::tvec2<valType> const & x,
|
||||
// detail::tvec2<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec2<bool>::bool_type(x.x <= y.x, x.y <= y.y);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec3<valType>::bool_type lessThanEqual
|
||||
//(
|
||||
// detail::tvec3<valType> const & x,
|
||||
// detail::tvec3<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec3<bool>::bool_type(x.x <= y.x, x.y <= y.y, x.z <= y.z);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec4<valType>::bool_type lessThanEqual
|
||||
//(
|
||||
// detail::tvec4<valType> const & x,
|
||||
// detail::tvec4<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec4<bool>::bool_type(x.x <= y.x, x.y <= y.y, x.z <= y.z, x.w <= y.w);
|
||||
//}
|
||||
//
|
||||
//// greaterThan
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec2<valType>::bool_type greaterThan
|
||||
//(
|
||||
// detail::tvec2<valType> const & x,
|
||||
// detail::tvec2<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec2<bool>::bool_type(x.x > y.x, x.y > y.y);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec3<valType>::bool_type greaterThan
|
||||
//(
|
||||
// detail::tvec3<valType> const & x,
|
||||
// detail::tvec3<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec3<bool>::bool_type(x.x > y.x, x.y > y.y, x.z > y.z);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec4<valType>::bool_type greaterThan
|
||||
//(
|
||||
// detail::tvec4<valType> const & x,
|
||||
// detail::tvec4<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec4<bool>::bool_type(x.x > y.x, x.y > y.y, x.z > y.z, x.w > y.w);
|
||||
//}
|
||||
//
|
||||
//// greaterThanEqual
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec2<valType>::bool_type greaterThanEqual
|
||||
//(
|
||||
// detail::tvec2<valType> const & x,
|
||||
// detail::tvec2<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec2<bool>::bool_type(x.x >= y.x, x.y >= y.y);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec3<valType>::bool_type greaterThanEqual
|
||||
//(
|
||||
// detail::tvec3<valType> const & x,
|
||||
// detail::tvec3<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec3<bool>::bool_type(x.x >= y.x, x.y >= y.y, x.z >= y.z);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec4<valType>::bool_type greaterThanEqual
|
||||
//(
|
||||
// detail::tvec4<valType> const & x,
|
||||
// detail::tvec4<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec4<bool>::bool_type(x.x >= y.x, x.y >= y.y, x.z >= y.z, x.w >= y.w);
|
||||
//}
|
||||
//
|
||||
//// equal
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec2<valType>::bool_type equal
|
||||
//(
|
||||
// detail::tvec2<valType> const & x,
|
||||
// detail::tvec2<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint ||
|
||||
// detail::type<valType>::is_bool);
|
||||
//
|
||||
// return typename detail::tvec2<valType>::bool_type(x.x == y.x, x.y == y.y);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec3<valType>::bool_type equal
|
||||
//(
|
||||
// detail::tvec3<valType> const & x,
|
||||
// detail::tvec3<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint ||
|
||||
// detail::type<valType>::is_bool);
|
||||
//
|
||||
// return typename detail::tvec3<valType>::bool_type(x.x == y.x, x.y == y.y, x.z == y.z);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec4<valType>::bool_type equal
|
||||
//(
|
||||
// detail::tvec4<valType> const & x,
|
||||
// detail::tvec4<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint ||
|
||||
// detail::type<valType>::is_bool);
|
||||
//
|
||||
// return typename detail::tvec4<valType>::bool_type(x.x == y.x, x.y == y.y, x.z == y.z, x.w == y.w);
|
||||
//}
|
||||
//
|
||||
//// notEqual
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec2<valType>::bool_type notEqual
|
||||
//(
|
||||
// detail::tvec2<valType> const & x,
|
||||
// detail::tvec2<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint ||
|
||||
// detail::type<valType>::is_bool);
|
||||
//
|
||||
// return typename detail::tvec2<valType>::bool_type(x.x != y.x, x.y != y.y);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec3<valType>::bool_type notEqual
|
||||
//(
|
||||
// detail::tvec3<valType> const & x,
|
||||
// detail::tvec3<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint ||
|
||||
// detail::type<valType>::is_bool);
|
||||
//
|
||||
// return typename detail::tvec3<valType>::bool_type(x.x != y.x, x.y != y.y, x.z != y.z);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//inline typename detail::tvec4<valType>::bool_type notEqual
|
||||
//(
|
||||
// detail::tvec4<valType> const & x,
|
||||
// detail::tvec4<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint ||
|
||||
// detail::type<valType>::is_bool);
|
||||
//
|
||||
// return typename detail::tvec4<valType>::bool_type(x.x != y.x, x.y != y.y, x.z != y.z, x.w != y.w);
|
||||
//}
|
||||
//
|
||||
//// any
|
||||
//inline bool any(detail::tvec2<bool> const & x)
|
||||
//{
|
||||
// return x.x || x.y;
|
||||
//}
|
||||
//
|
||||
//inline bool any(detail::tvec3<bool> const & x)
|
||||
//{
|
||||
// return x.x || x.y || x.z;
|
||||
//}
|
||||
//
|
||||
//inline bool any(detail::tvec4<bool> const & x)
|
||||
//{
|
||||
// return x.x || x.y || x.z || x.w;
|
||||
//}
|
||||
//
|
||||
//// all
|
||||
//inline bool all(const detail::tvec2<bool>& x)
|
||||
//{
|
||||
// return x.x && x.y;
|
||||
//}
|
||||
//
|
||||
//inline bool all(const detail::tvec3<bool>& x)
|
||||
//{
|
||||
// return x.x && x.y && x.z;
|
||||
//}
|
||||
//
|
||||
//inline bool all(const detail::tvec4<bool>& x)
|
||||
//{
|
||||
// return x.x && x.y && x.z && x.w;
|
||||
//}
|
||||
//
|
||||
//// not
|
||||
//inline detail::tvec2<bool>::bool_type not_
|
||||
//(
|
||||
// detail::tvec2<bool> const & v
|
||||
//)
|
||||
//{
|
||||
// return detail::tvec2<bool>::bool_type(!v.x, !v.y);
|
||||
//}
|
||||
//
|
||||
//inline detail::tvec3<bool>::bool_type not_
|
||||
//(
|
||||
// detail::tvec3<bool> const & v
|
||||
//)
|
||||
//{
|
||||
// return detail::tvec3<bool>::bool_type(!v.x, !v.y, !v.z);
|
||||
//}
|
||||
//
|
||||
//inline detail::tvec4<bool>::bool_type not_
|
||||
//(
|
||||
// detail::tvec4<bool> const & v
|
||||
//)
|
||||
//{
|
||||
// return detail::tvec4<bool>::bool_type(!v.x, !v.y, !v.z, !v.w);
|
||||
//}
|
||||
@@ -1,11 +1,30 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-11-13
|
||||
// Updated : 2011-01-26
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/setup.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/setup.hpp
|
||||
/// @date 2006-11-13 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_setup
|
||||
#define glm_setup
|
||||
@@ -13,16 +32,74 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Version
|
||||
|
||||
#define GLM_VERSION 91
|
||||
#define GLM_VERSION 94
|
||||
#define GLM_VERSION_MAJOR 0
|
||||
#define GLM_VERSION_MINOR 9
|
||||
#define GLM_VERSION_PATCH 1
|
||||
#define GLM_VERSION_PATCH 4
|
||||
#define GLM_VERSION_REVISION 0
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Platform
|
||||
|
||||
#define GLM_PLATFORM_UNKNOWN 0x00000000
|
||||
#define GLM_PLATFORM_WINDOWS 0x00010000
|
||||
#define GLM_PLATFORM_LINUX 0x00020000
|
||||
#define GLM_PLATFORM_APPLE 0x00040000
|
||||
//#define GLM_PLATFORM_IOS 0x00080000
|
||||
#define GLM_PLATFORM_ANDROID 0x00100000
|
||||
#define GLM_PLATFORM_CHROME_NACL 0x00200000
|
||||
#define GLM_PLATFORM_UNIX 0x00400000
|
||||
#define GLM_PLATFORM_QNXNTO 0x00800000
|
||||
|
||||
#ifdef GLM_FORCE_PLATFORM_UNKNOWN
|
||||
# define GLM_PLATFORM GLM_PLATFORM_UNKNOWN
|
||||
#elif defined(__QNXNTO__)
|
||||
# define GLM_PLATFORM GLM_PLATFORM_QNXNTO
|
||||
#elif defined(__APPLE__)
|
||||
# define GLM_PLATFORM GLM_PLATFORM_APPLE
|
||||
#elif defined(_WIN32)
|
||||
# define GLM_PLATFORM GLM_PLATFORM_WINDOWS
|
||||
#elif defined(__native_client__)
|
||||
# define GLM_PLATFORM GLM_PLATFORM_CHROME_NACL
|
||||
#elif defined(__ANDROID__)
|
||||
# define GLM_PLATFORM GLM_PLATFORM_ANDROID
|
||||
#elif defined(__linux)
|
||||
# define GLM_PLATFORM GLM_PLATFORM_LINUX
|
||||
#elif defined(__unix)
|
||||
# define GLM_PLATFORM GLM_PLATFORM_UNIX
|
||||
#else
|
||||
# define GLM_PLATFORM GLM_PLATFORM_UNKNOWN
|
||||
#endif//
|
||||
|
||||
// Report platform detection
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_PLATFORM_DISPLAYED))
|
||||
# define GLM_MESSAGE_PLATFORM_DISPLAYED
|
||||
# if(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)
|
||||
# pragma message("GLM: Windows platform detected")
|
||||
//# elif(GLM_PLATFORM & GLM_PLATFORM_IOS)
|
||||
//# pragma message("GLM: iOS platform detected")
|
||||
# elif(GLM_PLATFORM & GLM_PLATFORM_APPLE)
|
||||
# pragma message("GLM: Apple platform detected")
|
||||
# elif(GLM_PLATFORM & GLM_PLATFORM_LINUX)
|
||||
# pragma message("GLM: Linux platform detected")
|
||||
# elif(GLM_PLATFORM & GLM_PLATFORM_UNIX)
|
||||
# pragma message("GLM: UNIX platform detected")
|
||||
# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
|
||||
# pragma message("GLM: Android platform detected")
|
||||
# elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL)
|
||||
# pragma message("GLM: Chrone Native Client detected")
|
||||
# elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN)
|
||||
# pragma message("GLM: platform unknown")
|
||||
# else
|
||||
# pragma message("GLM: platform not detected")
|
||||
# endif
|
||||
#endif//GLM_MESSAGE
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Compiler
|
||||
|
||||
// User defines: GLM_FORCE_COMPILER_UNKNOWN
|
||||
// TODO ? __llvm__
|
||||
|
||||
#define GLM_COMPILER_UNKNOWN 0x00000000
|
||||
|
||||
@@ -37,9 +114,12 @@
|
||||
#define GLM_COMPILER_VC2005 0x01000070
|
||||
#define GLM_COMPILER_VC2008 0x01000080
|
||||
#define GLM_COMPILER_VC2010 0x01000090
|
||||
#define GLM_COMPILER_VC2012 0x010000A0
|
||||
|
||||
// GCC defines
|
||||
#define GLM_COMPILER_GCC 0x02000000
|
||||
#define GLM_COMPILER_GCC 0x02000000
|
||||
#define GLM_COMPILER_GCC_LLVM 0x02000001
|
||||
#define GLM_COMPILER_GCC_CLANG 0x02000002
|
||||
#define GLM_COMPILER_GCC30 0x02000010
|
||||
#define GLM_COMPILER_GCC31 0x02000020
|
||||
#define GLM_COMPILER_GCC32 0x02000030
|
||||
@@ -62,22 +142,106 @@
|
||||
// echo "" | g++ -E -dM -x c++ - | sort
|
||||
|
||||
// Borland C++ defines. How to identify BC?
|
||||
#define GLM_COMPILER_BC 0x03000000
|
||||
#define GLM_COMPILER_BCB4 0x03000100
|
||||
#define GLM_COMPILER_BCB5 0x03000200
|
||||
#define GLM_COMPILER_BCB6 0x03000300
|
||||
//#define GLM_COMPILER_BCBX 0x03000400 // What's the version value?
|
||||
#define GLM_COMPILER_BCB2009 0x03000500
|
||||
#define GLM_COMPILER_BC 0x04000000
|
||||
#define GLM_COMPILER_BCB4 0x04000100
|
||||
#define GLM_COMPILER_BCB5 0x04000200
|
||||
#define GLM_COMPILER_BCB6 0x04000300
|
||||
//#define GLM_COMPILER_BCBX 0x04000400 // What's the version value?
|
||||
#define GLM_COMPILER_BCB2009 0x04000500
|
||||
|
||||
// CodeWarrior
|
||||
#define GLM_COMPILER_CODEWARRIOR 0x08000000
|
||||
|
||||
// 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
|
||||
|
||||
// Clang
|
||||
#define GLM_COMPILER_CLANG 0x20000000
|
||||
#define GLM_COMPILER_CLANG26 0x20000010
|
||||
#define GLM_COMPILER_CLANG27 0x20000020
|
||||
#define GLM_COMPILER_CLANG28 0x20000030
|
||||
#define GLM_COMPILER_CLANG29 0x20000040
|
||||
#define GLM_COMPILER_CLANG30 0x20000050
|
||||
#define GLM_COMPILER_CLANG31 0x20000060
|
||||
#define GLM_COMPILER_CLANG32 0x20000070
|
||||
#define GLM_COMPILER_CLANG33 0x20000080
|
||||
#define GLM_COMPILER_CLANG40 0x20000090
|
||||
#define GLM_COMPILER_CLANG41 0x200000A0
|
||||
#define GLM_COMPILER_CLANG42 0x200000B0
|
||||
#define GLM_COMPILER_CLANG43 0x200000C0
|
||||
|
||||
// LLVM GCC
|
||||
#define GLM_COMPILER_LLVM_GCC 0x40000000
|
||||
|
||||
// Intel
|
||||
#define GLM_COMPILER_INTEL 0x80000000
|
||||
#define GLM_COMPILER_INTEL9 0x80000010
|
||||
#define GLM_COMPILER_INTEL10_0 0x80000020
|
||||
#define GLM_COMPILER_INTEL10_1 0x80000030
|
||||
#define GLM_COMPILER_INTEL11_0 0x80000040
|
||||
#define GLM_COMPILER_INTEL11_1 0x80000050
|
||||
#define GLM_COMPILER_INTEL12_0 0x80000060
|
||||
#define GLM_COMPILER_INTEL12_1 0x80000070
|
||||
#define GLM_COMPILER_INTEL13_0 0x80000080
|
||||
|
||||
// Build model
|
||||
#define GLM_MODEL_32 0x00000010
|
||||
#define GLM_MODEL_64 0x00000020
|
||||
|
||||
// CodeWarrior
|
||||
#define GLM_COMPILER_CODEWARRIOR 0x04000000
|
||||
|
||||
// Force generic C++ compiler
|
||||
#ifdef GLM_FORCE_COMPILER_UNKNOWN
|
||||
# define GLM_COMPILER GLM_COMPILER_UNKNOWN
|
||||
# define GLM_COMPILER GLM_COMPILER_UNKNOWN
|
||||
|
||||
#elif defined(__INTEL_COMPILER)
|
||||
# if __INTEL_COMPILER == 900
|
||||
# define GLM_COMPILER GLM_COMPILER_INTEL9
|
||||
# elif __INTEL_COMPILER == 1000
|
||||
# define GLM_COMPILER GLM_COMPILER_INTEL10_0
|
||||
# elif __INTEL_COMPILER == 1010
|
||||
# define GLM_COMPILER GLM_COMPILER_INTEL10_1
|
||||
# elif __INTEL_COMPILER == 1100
|
||||
# define GLM_COMPILER GLM_COMPILER_INTEL11_0
|
||||
# elif __INTEL_COMPILER == 1110
|
||||
# define GLM_COMPILER GLM_COMPILER_INTEL11_1
|
||||
# elif __INTEL_COMPILER == 1200
|
||||
# define GLM_COMPILER GLM_COMPILER_INTEL12_0
|
||||
# elif __INTEL_COMPILER == 1210
|
||||
# define GLM_COMPILER GLM_COMPILER_INTEL12_1
|
||||
# elif __INTEL_COMPILER == 1300
|
||||
# define GLM_COMPILER GLM_COMPILER_INTEL13_0
|
||||
# else
|
||||
# define GLM_COMPILER GLM_COMPILER_INTEL
|
||||
# endif
|
||||
|
||||
// CUDA
|
||||
#elif defined(__CUDACC__)
|
||||
# define GLM_COMPILER GLM_COMPILER_CUDA
|
||||
/*
|
||||
# if CUDA_VERSION < 3000
|
||||
# error "GLM requires CUDA 3.0 or higher"
|
||||
# elif CUDA_VERSION == 3000
|
||||
# define GLM_COMPILER GLM_COMPILER_CUDA30
|
||||
# elif CUDA_VERSION == 3010
|
||||
# define GLM_COMPILER GLM_COMPILER_CUDA31
|
||||
# elif CUDA_VERSION == 3020
|
||||
# define GLM_COMPILER GLM_COMPILER_CUDA32
|
||||
# elif CUDA_VERSION == 4000
|
||||
# define GLM_COMPILER GLM_COMPILER_CUDA40
|
||||
# elif CUDA_VERSION == 4010
|
||||
# define GLM_COMPILER GLM_COMPILER_CUDA41
|
||||
# elif CUDA_VERSION == 4020
|
||||
# define GLM_COMPILER GLM_COMPILER_CUDA42
|
||||
# else
|
||||
# define GLM_COMPILER GLM_COMPILER_CUDA
|
||||
# endif
|
||||
*/
|
||||
|
||||
// Visual C++
|
||||
#elif defined(_MSC_VER)
|
||||
# if _MSC_VER == 900
|
||||
@@ -98,12 +262,44 @@
|
||||
# define GLM_COMPILER GLM_COMPILER_VC2008
|
||||
# elif _MSC_VER == 1600
|
||||
# define GLM_COMPILER GLM_COMPILER_VC2010
|
||||
# elif _MSC_VER == 1700
|
||||
# define GLM_COMPILER GLM_COMPILER_VC2012
|
||||
# else//_MSC_VER
|
||||
# define GLM_COMPILER GLM_COMPILER_VC
|
||||
# endif//_MSC_VER
|
||||
|
||||
// G++
|
||||
#elif defined(__GNUC__)
|
||||
// Clang
|
||||
#elif defined(__clang__)
|
||||
# if(__clang_major__ == 2) && (__clang_minor__ == 6)
|
||||
# define GLM_COMPILER GLM_COMPILER_CLANG26
|
||||
# elif(__clang_major__ == 2) && (__clang_minor__ == 7)
|
||||
# define GLM_COMPILER GLM_COMPILER_CLANG27
|
||||
# elif(__clang_major__ == 2) && (__clang_minor__ == 8)
|
||||
# define GLM_COMPILER GLM_COMPILER_CLANG28
|
||||
# elif(__clang_major__ == 2) && (__clang_minor__ == 9)
|
||||
# define GLM_COMPILER GLM_COMPILER_CLANG29
|
||||
# elif(__clang_major__ == 3) && (__clang_minor__ == 0)
|
||||
# define GLM_COMPILER GLM_COMPILER_CLANG30
|
||||
# elif(__clang_major__ == 3) && (__clang_minor__ == 1)
|
||||
# define GLM_COMPILER GLM_COMPILER_CLANG31
|
||||
# elif(__clang_major__ == 3) && (__clang_minor__ == 2)
|
||||
# define GLM_COMPILER GLM_COMPILER_CLANG32
|
||||
# elif(__clang_major__ == 3) && (__clang_minor__ == 3)
|
||||
# define GLM_COMPILER GLM_COMPILER_CLANG33
|
||||
# elif(__clang_major__ == 4) && (__clang_minor__ == 0)
|
||||
# define GLM_COMPILER GLM_COMPILER_CLANG40
|
||||
# elif(__clang_major__ == 4) && (__clang_minor__ == 1)
|
||||
# define GLM_COMPILER GLM_COMPILER_CLANG41
|
||||
# elif(__clang_major__ == 4) && (__clang_minor__ == 2)
|
||||
# define GLM_COMPILER GLM_COMPILER_CLANG42
|
||||
# elif(__clang_major__ == 4) && (__clang_minor__ == 3)
|
||||
# define GLM_COMPILER GLM_COMPILER_CLANG43
|
||||
# else
|
||||
# define GLM_COMPILER GLM_COMPILER_CLANG
|
||||
# endif
|
||||
|
||||
// G++
|
||||
#elif(defined(__GNUC__) || defined(__MINGW32__))// || defined(__llvm__) || defined(__clang__)
|
||||
# if (__GNUC__ == 3) && (__GNUC_MINOR__ == 2)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC32
|
||||
# elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 3)
|
||||
@@ -113,29 +309,29 @@
|
||||
# elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 5)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC35
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 0)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC40
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC40)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 1)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC41
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC41)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 2)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC42
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC42)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC43
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC43)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 4)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC44
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC44)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 5)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC45
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC45)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 6)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC46
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC46)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 7)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC47
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC47)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC48
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC48)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 9)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC49
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC49)
|
||||
# elif (__GNUC__ == 5) && (__GNUC_MINOR__ == 0)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC50
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC50)
|
||||
# else
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC)
|
||||
# endif
|
||||
|
||||
// Borland C++
|
||||
@@ -167,13 +363,25 @@
|
||||
// Report compiler detection
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_COMPILER_DISPLAYED))
|
||||
# define GLM_MESSAGE_COMPILER_DISPLAYED
|
||||
# if(defined(GLM_COMPILER) && GLM_COMPILER & GLM_COMPILER_VC)
|
||||
# if(GLM_COMPILER & GLM_COMPILER_CUDA)
|
||||
# pragma message("GLM: CUDA compiler detected")
|
||||
# elif(GLM_COMPILER & GLM_COMPILER_VC)
|
||||
# pragma message("GLM: Visual C++ compiler detected")
|
||||
# elif(defined(GLM_COMPILER) && GLM_COMPILER & GLM_COMPILER_GCC)
|
||||
# pragma message("GLM: GCC compiler detected")
|
||||
# elif(defined(GLM_COMPILER) && GLM_COMPILER & GLM_COMPILER_BC)
|
||||
# elif(GLM_COMPILER & GLM_COMPILER_CLANG)
|
||||
# pragma message("GLM: Clang compiler detected")
|
||||
# elif(GLM_COMPILER & GLM_COMPILER_LLVM_GCC)
|
||||
# pragma message("GLM: LLVM GCC compiler detected")
|
||||
# elif(GLM_COMPILER & GLM_COMPILER_GCC)
|
||||
# if(GLM_COMPILER == GLM_COMPILER_GCC_LLVM)
|
||||
# pragma message("GLM: LLVM GCC compiler detected")
|
||||
# elif(GLM_COMPILER == GLM_COMPILER_GCC_CLANG)
|
||||
# pragma message("GLM: CLANG compiler detected")
|
||||
# else
|
||||
# pragma message("GLM: GCC compiler detected")
|
||||
# endif
|
||||
# elif(GLM_COMPILER & GLM_COMPILER_BC)
|
||||
# pragma message("GLM: Borland compiler detected but not supported")
|
||||
# elif(defined(GLM_COMPILER) && GLM_COMPILER & GLM_COMPILER_CODEWARRIOR)
|
||||
# elif(GLM_COMPILER & GLM_COMPILER_CODEWARRIOR)
|
||||
# pragma message("GLM: Codewarrior compiler detected but not supported")
|
||||
# else
|
||||
# pragma message("GLM: Compiler not detected")
|
||||
@@ -183,24 +391,16 @@
|
||||
/////////////////
|
||||
// Build model //
|
||||
|
||||
#if(GLM_COMPILER & GLM_COMPILER_VC)
|
||||
# if defined(_M_X64)
|
||||
#if(defined(__arch64__) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__))
|
||||
# define GLM_MODEL GLM_MODEL_64
|
||||
# else
|
||||
# define GLM_MODEL GLM_MODEL_32
|
||||
# endif//_M_X64
|
||||
#elif(GLM_COMPILER & GLM_COMPILER_GCC)
|
||||
# if(defined(__WORDSIZE) && (__WORDSIZE == 64)) || defined(__arch64__) || defined(__LP64__) || defined(__x86_64__)
|
||||
# define GLM_MODEL GLM_MODEL_64
|
||||
# else
|
||||
# define GLM_MODEL GLM_MODEL_32
|
||||
# endif//
|
||||
#elif(defined(__i386__) || defined(__ppc__))
|
||||
# define GLM_MODEL GLM_MODEL_32
|
||||
#else
|
||||
# define GLM_MODEL GLM_MODEL_32
|
||||
#endif//
|
||||
|
||||
#if(!defined(GLM_MODEL) && GLM_COMPILER != 0)
|
||||
#error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message."
|
||||
# error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message."
|
||||
#endif//GLM_MODEL
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_MODEL_DISPLAYED))
|
||||
@@ -217,32 +417,57 @@
|
||||
|
||||
// User defines: GLM_FORCE_CXX98
|
||||
|
||||
#define GLM_LANG_CXX 0
|
||||
#define GLM_LANG_CXX98 1
|
||||
#define GLM_LANG_CXX0X 2
|
||||
#define GLM_LANG_CXXMS 3
|
||||
#define GLM_LANG_CXXGNU 4
|
||||
#define GLM_LANG_CXX (0 << 0)
|
||||
#define GLM_LANG_CXX98 ((1 << 1) | GLM_LANG_CXX)
|
||||
#define GLM_LANG_CXX03 ((1 << 2) | GLM_LANG_CXX98)
|
||||
#define GLM_LANG_CXX0X ((1 << 3) | GLM_LANG_CXX03)
|
||||
#define GLM_LANG_CXX11 ((1 << 4) | GLM_LANG_CXX0X)
|
||||
#define GLM_LANG_CXXMS (1 << 5)
|
||||
#define GLM_LANG_CXXGNU (1 << 6)
|
||||
|
||||
#if(defined(GLM_FORCE_CXX98))
|
||||
# define GLM_LANG GLM_LANG_CXX98
|
||||
#elif(((GLM_COMPILER & GLM_COMPILER_GCC) == GLM_COMPILER_GCC) && defined(__GXX_EXPERIMENTAL_CXX0X__)) // -std=c++0x or -std=gnu++0x
|
||||
# define GLM_LANG GLM_LANG_CXX0X
|
||||
#elif(GLM_COMPILER == GLM_COMPILER_VC2010) //_MSC_EXTENSIONS for MS language extensions
|
||||
# define GLM_LANG GLM_LANG_CXX0X
|
||||
#elif(((GLM_COMPILER & GLM_COMPILER_GCC) == GLM_COMPILER_GCC) && defined(__STRICT_ANSI__))
|
||||
# define GLM_LANG GLM_LANG_CXX98
|
||||
#elif(((GLM_COMPILER & GLM_COMPILER_VC) == GLM_COMPILER_VC) && !defined(_MSC_EXTENSIONS))
|
||||
#if(defined(GLM_FORCE_CXX11))
|
||||
# define GLM_LANG GLM_LANG_CXX11
|
||||
#elif(defined(GLM_FORCE_CXX03))
|
||||
# define GLM_LANG GLM_LANG_CXX03
|
||||
#elif(defined(GLM_FORCE_CXX98))
|
||||
# define GLM_LANG GLM_LANG_CXX98
|
||||
#else
|
||||
# define GLM_LANG GLM_LANG_CXX
|
||||
// -std=c++0x or -std=gnu++0x
|
||||
# if(((GLM_COMPILER & GLM_COMPILER_GCC) == GLM_COMPILER_GCC) && defined(__GXX_EXPERIMENTAL_CXX0X__))
|
||||
# define GLM_LANG GLM_LANG_CXX0X
|
||||
# elif(((GLM_COMPILER & GLM_COMPILER_VC) == GLM_COMPILER_VC) && defined(_MSC_EXTENSIONS))
|
||||
# define GLM_LANG GLM_LANG_CXXMS
|
||||
# elif(((GLM_COMPILER & GLM_COMPILER_VC) == GLM_COMPILER_VC) && !defined(_MSC_EXTENSIONS))
|
||||
# if(GLM_COMPILER >= GLM_COMPILER_VC2010)
|
||||
# define GLM_LANG GLM_LANG_CXX0X
|
||||
# else
|
||||
# define GLM_LANG GLM_LANG_CXX98
|
||||
# endif//(GLM_COMPILER == GLM_COMPILER_VC2010)
|
||||
# elif((GLM_COMPILER & GLM_COMPILER_GCC) == GLM_COMPILER_GCC) //&& defined(__STRICT_ANSI__))
|
||||
# define GLM_LANG GLM_LANG_CXX98
|
||||
# elif((GLM_COMPILER & GLM_COMPILER_CLANG) == GLM_COMPILER_CLANG)
|
||||
# define GLM_LANG GLM_LANG_CXX98
|
||||
# else
|
||||
# define GLM_LANG GLM_LANG_CXX
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_LANG_DISPLAYED))
|
||||
# define GLM_MESSAGE_LANG_DISPLAYED
|
||||
# if(GLM_LANG == GLM_LANG_CXX98)
|
||||
# pragma message("GLM: C++98")
|
||||
# elif(GLM_LANG == GLM_LANG_CXX03)
|
||||
# pragma message("GLM: C++03")
|
||||
# elif(GLM_LANG == GLM_LANG_CXX0X)
|
||||
# pragma message("GLM: C++0x")
|
||||
# elif(GLM_LANG == GLM_LANG_CXX11)
|
||||
# pragma message("GLM: C++11")
|
||||
# elif(GLM_LANG == GLM_LANG_CXXGNU)
|
||||
# pragma message("GLM: C++ with GNU language extensions")
|
||||
# elif(GLM_LANG == GLM_LANG_CXXMS)
|
||||
# pragma message("GLM: C++ with VC language extensions")
|
||||
# else
|
||||
# pragma message("GLM: C++ language undetected")
|
||||
# endif//GLM_MODEL
|
||||
#endif//GLM_MESSAGE
|
||||
|
||||
@@ -251,109 +476,152 @@
|
||||
|
||||
// User defines: GLM_FORCE_PURE GLM_FORCE_SSE2 GLM_FORCE_AVX
|
||||
|
||||
#define GLM_ARCH_PURE 0x0000 //(0x0000)
|
||||
#define GLM_ARCH_SSE2 0x0001 //(0x0001)
|
||||
#define GLM_ARCH_SSE3 0x0003 //(0x0002 | GLM_ARCH_SSE2)
|
||||
#define GLM_ARCH_AVX 0x0007 //(0x0004 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
|
||||
#define GLM_ARCH_PURE 0x0000
|
||||
#define GLM_ARCH_SSE2 0x0001
|
||||
#define GLM_ARCH_SSE3 0x0002// | GLM_ARCH_SSE2
|
||||
#define GLM_ARCH_SSE4 0x0004// | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
|
||||
#define GLM_ARCH_AVX 0x0008// | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
|
||||
#define GLM_ARCH_AVX2 0x0010// | GLM_ARCH_AVX | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
|
||||
|
||||
#if(defined(GLM_FORCE_PURE))
|
||||
# define GLM_ARCH GLM_ARCH_PURE
|
||||
#elif(defined(GLM_FORCE_AVX2))
|
||||
# define GLM_ARCH (GLM_ARCH_AVX2 | GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
|
||||
#elif(defined(GLM_FORCE_AVX))
|
||||
# define GLM_ARCH GLM_ARCH_AVX
|
||||
# define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
|
||||
#elif(defined(GLM_FORCE_SSE4))
|
||||
# define GLM_ARCH (GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
|
||||
#elif(defined(GLM_FORCE_SSE3))
|
||||
# define GLM_ARCH GLM_ARCH_SSE3
|
||||
# define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
|
||||
#elif(defined(GLM_FORCE_SSE2))
|
||||
# define GLM_ARCH GLM_ARCH_SSE2
|
||||
# define GLM_ARCH (GLM_ARCH_SSE2)
|
||||
#elif((GLM_COMPILER & GLM_COMPILER_VC) && (defined(_M_IX86) || defined(_M_X64)))
|
||||
# if(defined(_M_CEE_PURE))
|
||||
# define GLM_ARCH GLM_ARCH_PURE
|
||||
/* TODO: Explore auto detection of instruction set support
|
||||
# elif(defined(_M_IX86_FP))
|
||||
# if(_M_IX86_FP >= 3)
|
||||
# define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
|
||||
# elif(_M_IX86_FP >= 2)
|
||||
# define GLM_ARCH (GLM_ARCH_SSE2)
|
||||
# else
|
||||
# define GLM_ARCH GLM_ARCH_PURE
|
||||
# endif
|
||||
*/
|
||||
# elif(GLM_COMPILER >= GLM_COMPILER_VC2012)
|
||||
# define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
|
||||
# elif(GLM_COMPILER >= GLM_COMPILER_VC2010)
|
||||
# if(_MSC_FULL_VER >= 160031118) //160031118: VC2010 SP1 beta full version
|
||||
# define GLM_ARCH GLM_ARCH_AVX //GLM_ARCH_AVX (Require SP1)
|
||||
# define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)//GLM_ARCH_AVX (Require SP1)
|
||||
# else
|
||||
# define GLM_ARCH GLM_ARCH_SSE3
|
||||
# define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
|
||||
# endif
|
||||
# elif(GLM_COMPILER >= GLM_COMPILER_VC2008)
|
||||
# define GLM_ARCH GLM_ARCH_SSE3
|
||||
# define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
|
||||
# elif(GLM_COMPILER >= GLM_COMPILER_VC2005)
|
||||
# define GLM_ARCH GLM_ARCH_SSE2
|
||||
# else
|
||||
# define GLM_ARCH GLM_ARCH_PURE
|
||||
# endif
|
||||
#elif((GLM_COMPILER & GLM_COMPILER_GCC) && (defined(__i386__) || defined(__x86_64__)))
|
||||
# if(defined(__AVX__))
|
||||
# define GLM_ARCH GLM_ARCH_AVX
|
||||
# elif(defined(__SSE3__))
|
||||
# define GLM_ARCH GLM_ARCH_SSE3
|
||||
# elif(defined(__SSE2__))
|
||||
# define GLM_ARCH GLM_ARCH_SSE2
|
||||
# else
|
||||
# define GLM_ARCH GLM_ARCH_PURE
|
||||
# endif
|
||||
#elif((GLM_PLATFORM & GLM_PLATFORM_APPLE) && (GLM_COMPILER & GLM_COMPILER_GCC))
|
||||
# define GLM_ARCH GLM_ARCH_PURE
|
||||
#elif(((GLM_COMPILER & GLM_COMPILER_GCC) && (defined(__i386__) || defined(__x86_64__))) || (GLM_COMPILER & GLM_COMPILER_LLVM_GCC))
|
||||
# define GLM_ARCH (GLM_ARCH_PURE \
|
||||
| (defined(__AVX2__) ? GLM_ARCH_AVX2 : 0) \
|
||||
| (defined(__AVX__) ? GLM_ARCH_AVX : 0) \
|
||||
| (defined(__SSE4__) ? GLM_ARCH_SSE4 : 0) \
|
||||
| (defined(__SSE3__) ? GLM_ARCH_SSE3 : 0) \
|
||||
| (defined(__SSE2__) ? GLM_ARCH_SSE2 : 0))
|
||||
#else
|
||||
# define GLM_ARCH GLM_ARCH_PURE
|
||||
#endif
|
||||
|
||||
#if(GLM_ARCH != GLM_ARCH_PURE)
|
||||
#if((GLM_ARCH & GLM_ARCH_AVX) == GLM_ARCH_AVX)
|
||||
//#if(GLM_ARCH != GLM_ARCH_PURE)
|
||||
#if(GLM_ARCH & GLM_ARCH_AVX2)
|
||||
# include <immintrin.h>
|
||||
#endif//GLM_ARCH
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE3) == GLM_ARCH_SSE3)
|
||||
#if(GLM_ARCH & GLM_ARCH_AVX)
|
||||
# include <immintrin.h>
|
||||
#endif//GLM_ARCH
|
||||
#if(GLM_ARCH & GLM_ARCH_SSE4)
|
||||
# include <smmintrin.h>
|
||||
#endif//GLM_ARCH
|
||||
#if(GLM_ARCH & GLM_ARCH_SSE3)
|
||||
# include <pmmintrin.h>
|
||||
#endif//GLM_ARCH
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE2) == GLM_ARCH_SSE2)
|
||||
#if(GLM_ARCH & GLM_ARCH_SSE2)
|
||||
# include <emmintrin.h>
|
||||
#endif//GLM_ARCH
|
||||
#endif//(GLM_ARCH != GLM_ARCH_PURE)
|
||||
//#endif//(GLM_ARCH != GLM_ARCH_PURE)
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_ARCH_DISPLAYED))
|
||||
# define GLM_MESSAGE_ARCH_DISPLAYED
|
||||
# if(GLM_ARCH == GLM_ARCH_PURE)
|
||||
# pragma message("GLM: Platform independent")
|
||||
# elif(GLM_ARCH == GLM_ARCH_SSE2)
|
||||
# pragma message("GLM: SSE2 build platform")
|
||||
# elif(GLM_ARCH == GLM_ARCH_SSE3)
|
||||
# pragma message("GLM: SSE3 build platform")
|
||||
# elif(GLM_ARCH == GLM_ARCH_AVX)
|
||||
# pragma message("GLM: AVX build platform")
|
||||
# elif(GLM_ARCH & GLM_ARCH_SSE2)
|
||||
# pragma message("GLM: SSE2 instruction set")
|
||||
# elif(GLM_ARCH & GLM_ARCH_SSE3)
|
||||
# pragma message("GLM: SSE3 instruction set")
|
||||
# elif(GLM_ARCH & GLM_ARCH_SSE4)
|
||||
# pragma message("GLM: SSE4 instruction set")
|
||||
# elif(GLM_ARCH & GLM_ARCH_AVX)
|
||||
# pragma message("GLM: AVX instruction set")
|
||||
# elif(GLM_ARCH & GLM_ARCH_AVX2)
|
||||
# pragma message("GLM: AVX2 instruction set")
|
||||
# endif//GLM_ARCH
|
||||
#endif//GLM_MESSAGE
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Support check macros
|
||||
|
||||
#define GLM_SUPPORT_ANONYMOUS_UNION() \
|
||||
((GLM_LANG & GLM_LANG_CXX98) == GLM_LANG_CXX98)
|
||||
|
||||
//#define GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE() <backslash>
|
||||
// (((GLM_LANG & GLM_LANG_CXX11) == GLM_LANG_CXX11) || ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_LANG & GLM_LANG_CXXMS) == GLM_LANG_CXXMS) || ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_LANG == GLM_LANG_CXX0X)))
|
||||
|
||||
#define GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE() \
|
||||
(((GLM_LANG & GLM_LANG_CXX11) == GLM_LANG_CXX11) || ((GLM_COMPILER & GLM_COMPILER_VC) && ((GLM_LANG & GLM_LANG_CXXMS) == GLM_LANG_CXXMS)) || ((GLM_LANG == GLM_LANG_CXX0X) == GLM_LANG_CXX0X))
|
||||
|
||||
#define GLM_SUPPORT_SWIZZLE_OPERATOR() \
|
||||
(/*defined(GLM_SWIZZLE) && */GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE())
|
||||
|
||||
#define GLM_SUPPORT_SWIZZLE_FUNCTION() defined(GLM_SWIZZLE)
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Components
|
||||
|
||||
//#define GLM_FORCE_ONLY_XYZW
|
||||
#define GLM_COMPONENT_GLSL_NAMES 0
|
||||
#define GLM_COMPONENT_ONLY_XYZW 1 // To disable multiple vector component names access.
|
||||
#define GLM_COMPONENT_MS_EXT 2 // To use anonymous union to provide multiple component names access for class valType. Visual C++ only.
|
||||
#define GLM_COMPONENT_ONLY_XYZW 0 // To disable multiple vector component names access.
|
||||
#define GLM_COMPONENT_CXX98 1 //
|
||||
#define GLM_COMPONENT_CXX11 2 // To use anonymous union to provide multiple component names access for class valType. Visual C++ only.
|
||||
|
||||
#ifndef GLM_FORCE_ONLY_XYZW
|
||||
# if((GLM_COMPILER & GLM_COMPILER_VC) && defined(_MSC_EXTENSIONS))
|
||||
# define GLM_COMPONENT GLM_COMPONENT_MS_EXT
|
||||
# else
|
||||
# define GLM_COMPONENT GLM_COMPONENT_GLSL_NAMES
|
||||
# endif
|
||||
#if(GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE() && !defined(GLM_FORCE_ONLY_XYZW))
|
||||
# define GLM_COMPONENT GLM_COMPONENT_CXX11
|
||||
#elif(GLM_SUPPORT_ANONYMOUS_UNION() && !defined(GLM_FORCE_ONLY_XYZW))
|
||||
# define GLM_COMPONENT GLM_COMPONENT_CXX98
|
||||
#else
|
||||
# define GLM_COMPONENT GLM_COMPONENT_ONLY_XYZW
|
||||
#endif
|
||||
|
||||
#if((GLM_COMPONENT == GLM_COMPONENT_MS_EXT) && !(GLM_COMPILER & GLM_COMPILER_VC))
|
||||
# error "GLM_COMPONENT value is GLM_COMPONENT_MS_EXT but this is not allowed with the current compiler."
|
||||
#endif
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_COMPONENT_DISPLAYED))
|
||||
# define GLM_MESSAGE_COMPONENT_DISPLAYED
|
||||
# if(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
|
||||
# pragma message("GLM: GLSL multiple vector component names")
|
||||
# if(GLM_COMPONENT == GLM_COMPONENT_CXX98)
|
||||
# pragma message("GLM: x,y,z,w; r,g,b,a; s,t,p,q component names except of half based vector types")
|
||||
# elif(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
|
||||
# pragma message("GLM: x,y,z,w vector component names only")
|
||||
# elif(GLM_COMPONENT == GLM_COMPONENT_MS_EXT)
|
||||
# pragma message("GLM: Multiple vector component names through Visual C++ language extensions")
|
||||
# pragma message("GLM: x,y,z,w component names for all vector types")
|
||||
# elif(GLM_COMPONENT == GLM_COMPONENT_CXX11)
|
||||
# pragma message("GLM: x,y,z,w; r,g,b,a; s,t,p,q component names for all vector types")
|
||||
# else
|
||||
# error "GLM_COMPONENT value unknown"
|
||||
# error "GLM: GLM_COMPONENT value unknown"
|
||||
# endif//GLM_MESSAGE_COMPONENT_DISPLAYED
|
||||
#endif//GLM_MESSAGE
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Radians
|
||||
|
||||
//#define GLM_FORCE_RADIANS
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Static assert
|
||||
|
||||
@@ -369,53 +637,53 @@
|
||||
#endif//GLM_LANG
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// inline
|
||||
// Qualifiers
|
||||
|
||||
// User defines: GLM_FORCE_INLINE
|
||||
// User defines: GLM_FORCE_INLINE GLM_FORCE_CUDA
|
||||
|
||||
#if(defined(GLM_FORCE_CUDA) || (GLM_COMPILER & GLM_COMPILER_CUDA))
|
||||
# define GLM_CUDA_FUNC_DEF __device__ __host__
|
||||
# define GLM_CUDA_FUNC_DECL __device__ __host__
|
||||
#else
|
||||
# define GLM_CUDA_FUNC_DEF
|
||||
# define GLM_CUDA_FUNC_DECL
|
||||
#endif
|
||||
|
||||
#if GLM_COMPILER & GLM_COMPILER_GCC
|
||||
#define GLM_VAR_USED __attribute__ ((unused))
|
||||
#else
|
||||
#define GLM_VAR_USED
|
||||
#endif
|
||||
|
||||
#if(defined(GLM_FORCE_INLINE))
|
||||
# if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005))
|
||||
# define GLM_INLINE __forceinline
|
||||
# elif((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_VC2005))
|
||||
# define GLM_INLINE __attribute__((always_inline))
|
||||
# else
|
||||
# define GLM_INLINE inline
|
||||
# endif//GLM_COMPILER
|
||||
# if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005))
|
||||
# define GLM_INLINE __forceinline
|
||||
# elif((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC34))
|
||||
# define GLM_INLINE __attribute__((always_inline))
|
||||
# else
|
||||
# define GLM_INLINE inline
|
||||
# endif//GLM_COMPILER
|
||||
#else
|
||||
# define GLM_INLINE inline
|
||||
# define GLM_INLINE inline
|
||||
#endif//defined(GLM_FORCE_INLINE)
|
||||
|
||||
#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL
|
||||
#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
// User defines: GLM_SWIZZLE_XYZW GLM_SWIZZLE_RGBA GLM_SWIZZLE_STQP GLM_SWIZZLE
|
||||
// User defines: GLM_SWIZZLE
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_SWIZZLE_DISPLAYED))
|
||||
# define GLM_MESSAGE_SWIZZLE_DISPLAYED
|
||||
# if(defined(GLM_SWIZZLE))
|
||||
# pragma message("GLM: Full swizzling operator enabled")
|
||||
# elif(!defined(GLM_SWIZZLE_XYZW) && !defined(GLM_SWIZZLE_RGBA) && !defined(GLM_SWIZZLE_STQP) && !defined(GLM_SWIZZLE))
|
||||
# pragma message("GLM: No swizzling operator enabled")
|
||||
# if(GLM_SUPPORT_SWIZZLE_OPERATOR())
|
||||
# pragma message("GLM: Swizzling operators enabled")
|
||||
# elif(GLM_SUPPORT_SWIZZLE_FUNCTION())
|
||||
# pragma message("GLM: Swizzling operators supported through swizzling functions")
|
||||
# else
|
||||
# pragma message("GLM: Partial swizzling operator enabled")
|
||||
# pragma message("GLM: Swizzling operators disabled")
|
||||
# endif
|
||||
#endif//GLM_MESSAGE
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Precision
|
||||
|
||||
#define GLM_PRECISION_NONE 0x00000000
|
||||
|
||||
#define GLM_PRECISION_LOWP_FLOAT 0x00000011
|
||||
#define GLM_PRECISION_MEDIUMP_FLOAT 0x00000012
|
||||
#define GLM_PRECISION_HIGHP_FLOAT 0x00000013
|
||||
|
||||
#define GLM_PRECISION_LOWP_INT 0x00001100
|
||||
#define GLM_PRECISION_MEDIUMP_INT 0x00001200
|
||||
#define GLM_PRECISION_HIGHP_INT 0x00001300
|
||||
|
||||
#define GLM_PRECISION_LOWP_UINT 0x00110000
|
||||
#define GLM_PRECISION_MEDIUMP_UINT 0x00120000
|
||||
#define GLM_PRECISION_HIGHP_UINT 0x00130000
|
||||
|
||||
#endif//glm_setup
|
||||
|
||||
@@ -1,11 +1,30 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-01-08
|
||||
// Updated : 2008-01-08
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type.hpp
|
||||
/// @date 2008-01-08 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type
|
||||
#define glm_core_type
|
||||
@@ -21,302 +40,170 @@
|
||||
#include "type_vec3.hpp"
|
||||
#include "type_vec4.hpp"
|
||||
|
||||
#include "type_mat2x2.hpp"
|
||||
#include "type_mat2x3.hpp"
|
||||
#include "type_mat2x4.hpp"
|
||||
#include "type_mat3x2.hpp"
|
||||
#include "type_mat3x3.hpp"
|
||||
#include "type_mat3x4.hpp"
|
||||
#include "type_mat4x2.hpp"
|
||||
#include "type_mat4x3.hpp"
|
||||
#include "type_mat4x4.hpp"
|
||||
|
||||
namespace glm{
|
||||
namespace core{
|
||||
namespace type
|
||||
namespace glm
|
||||
{
|
||||
/// @addtogroup core_types
|
||||
/// @{
|
||||
|
||||
//////////////////////////
|
||||
// Float definition
|
||||
|
||||
#if(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_HIGHP_FLOAT)
|
||||
typedef precision::highp_vec2 vec2;
|
||||
typedef precision::highp_vec3 vec3;
|
||||
typedef precision::highp_vec4 vec4;
|
||||
typedef precision::highp_mat2x2 mat2x2;
|
||||
typedef precision::highp_mat2x3 mat2x3;
|
||||
typedef precision::highp_mat2x4 mat2x4;
|
||||
typedef precision::highp_mat3x2 mat3x2;
|
||||
typedef precision::highp_mat3x3 mat3x3;
|
||||
typedef precision::highp_mat3x4 mat3x4;
|
||||
typedef precision::highp_mat4x2 mat4x2;
|
||||
typedef precision::highp_mat4x3 mat4x3;
|
||||
typedef precision::highp_mat4x4 mat4x4;
|
||||
#elif(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_MEDIUMP_FLOAT)
|
||||
typedef precision::mediump_vec2 vec2;
|
||||
typedef precision::mediump_vec3 vec3;
|
||||
typedef precision::mediump_vec4 vec4;
|
||||
typedef precision::mediump_mat2x2 mat2x2;
|
||||
typedef precision::mediump_mat2x3 mat2x3;
|
||||
typedef precision::mediump_mat2x4 mat2x4;
|
||||
typedef precision::mediump_mat3x2 mat3x2;
|
||||
typedef precision::mediump_mat3x3 mat3x3;
|
||||
typedef precision::mediump_mat3x4 mat3x4;
|
||||
typedef precision::mediump_mat4x2 mat4x2;
|
||||
typedef precision::mediump_mat4x3 mat4x3;
|
||||
typedef precision::mediump_mat4x4 mat4x4;
|
||||
#elif(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_LOWP_FLOAT)
|
||||
typedef precision::lowp_vec2 vec2;
|
||||
typedef precision::lowp_vec3 vec3;
|
||||
typedef precision::lowp_vec4 vec4;
|
||||
typedef precision::lowp_mat2x2 mat2x2;
|
||||
typedef precision::lowp_mat2x3 mat2x3;
|
||||
typedef precision::lowp_mat2x4 mat2x4;
|
||||
typedef precision::lowp_mat3x2 mat3x2;
|
||||
typedef precision::lowp_mat3x3 mat3x3;
|
||||
typedef precision::lowp_mat3x4 mat3x4;
|
||||
typedef precision::lowp_mat4x2 mat4x2;
|
||||
typedef precision::lowp_mat4x3 mat4x3;
|
||||
typedef precision::lowp_mat4x4 mat4x4;
|
||||
#if(defined(GLM_PRECISION_HIGHP_FLOAT))
|
||||
typedef highp_vec2 vec2;
|
||||
typedef highp_vec3 vec3;
|
||||
typedef highp_vec4 vec4;
|
||||
typedef highp_mat4x4 mat4x4;
|
||||
#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
|
||||
typedef mediump_vec2 vec2;
|
||||
typedef mediump_vec3 vec3;
|
||||
typedef mediump_vec4 vec4;
|
||||
typedef mediump_mat4x4 mat4x4;
|
||||
#elif(defined(GLM_PRECISION_LOWP_FLOAT))
|
||||
typedef lowp_vec2 vec2;
|
||||
typedef lowp_vec3 vec3;
|
||||
typedef lowp_vec4 vec4;
|
||||
typedef lowp_mat4x4 mat4x4;
|
||||
#else
|
||||
//! 2 components vector of floating-point numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_vec2 vec2;
|
||||
/// 2 components vector of floating-point numbers.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef mediump_vec2 vec2;
|
||||
|
||||
//! 3 components vector of floating-point numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_vec3 vec3;
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef mediump_vec3 vec3;
|
||||
|
||||
//! 4 components vector of floating-point numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_vec4 vec4;
|
||||
|
||||
//! 2 columns of 2 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat2x2 mat2x2;
|
||||
|
||||
//! 2 columns of 3 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat2x3 mat2x3;
|
||||
|
||||
//! 2 columns of 4 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat2x4 mat2x4;
|
||||
|
||||
//! 3 columns of 2 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat3x2 mat3x2;
|
||||
|
||||
//! 3 columns of 3 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat3x3 mat3x3;
|
||||
|
||||
//! 3 columns of 4 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat3x4 mat3x4;
|
||||
|
||||
//! 4 columns of 2 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat4x2 mat4x2;
|
||||
|
||||
//! 4 columns of 3 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat4x3 mat4x3;
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef mediump_vec4 vec4;
|
||||
|
||||
//! 4 columns of 4 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat4x4 mat4x4;
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||
typedef mediump_mat4x4 mat4x4;
|
||||
|
||||
#endif//GLM_PRECISION
|
||||
|
||||
//! 2 columns of 2 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef mat2x2 mat2;
|
||||
|
||||
//! 3 columns of 3 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef mat3x3 mat3;
|
||||
|
||||
//! 4 columns of 4 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||
typedef mat4x4 mat4;
|
||||
|
||||
//////////////////////////
|
||||
// Signed integer definition
|
||||
|
||||
#if(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_HIGHP_INT)
|
||||
typedef precision::highp_ivec2 ivec2;
|
||||
typedef precision::highp_ivec3 ivec3;
|
||||
typedef precision::highp_ivec4 ivec4;
|
||||
#elif(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_MEDIUMP_INT)
|
||||
typedef precision::mediump_ivec2 ivec2;
|
||||
typedef precision::mediump_ivec3 ivec3;
|
||||
typedef precision::mediump_ivec4 ivec4;
|
||||
#elif(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_LOWP_INT)
|
||||
typedef precision::lowp_ivec2 ivec2;
|
||||
typedef precision::lowp_ivec3 ivec3;
|
||||
typedef precision::lowp_ivec4 ivec4;
|
||||
#if(defined(GLM_PRECISION_HIGHP_INT))
|
||||
typedef highp_ivec2 ivec2;
|
||||
typedef highp_ivec3 ivec3;
|
||||
typedef highp_ivec4 ivec4;
|
||||
#elif(defined(GLM_PRECISION_MEDIUMP_INT))
|
||||
typedef mediump_ivec2 ivec2;
|
||||
typedef mediump_ivec3 ivec3;
|
||||
typedef mediump_ivec4 ivec4;
|
||||
#elif(defined(GLM_PRECISION_LOWP_INT))
|
||||
typedef lowp_ivec2 ivec2;
|
||||
typedef lowp_ivec3 ivec3;
|
||||
typedef lowp_ivec4 ivec4;
|
||||
#else
|
||||
//! 2 components vector of signed integer numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_ivec2 ivec2;
|
||||
//! 2 components vector of signed integer numbers.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef mediump_ivec2 ivec2;
|
||||
|
||||
//! 3 components vector of signed integer numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_ivec3 ivec3;
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef mediump_ivec3 ivec3;
|
||||
|
||||
//! 4 components vector of signed integer numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_ivec4 ivec4;
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef mediump_ivec4 ivec4;
|
||||
#endif//GLM_PRECISION
|
||||
|
||||
//////////////////////////
|
||||
// Unsigned integer definition
|
||||
|
||||
#if(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_HIGHP_UINT)
|
||||
typedef precision::highp_uvec2 uvec2;
|
||||
typedef precision::highp_uvec3 uvec3;
|
||||
typedef precision::highp_uvec4 uvec4;
|
||||
#elif(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_MEDIUMP_UINT)
|
||||
typedef precision::mediump_uvec2 uvec2;
|
||||
typedef precision::mediump_uvec3 uvec3;
|
||||
typedef precision::mediump_uvec4 uvec4;
|
||||
#elif(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_LOWP_UINT)
|
||||
typedef precision::lowp_uvec2 uvec2;
|
||||
typedef precision::lowp_uvec3 uvec3;
|
||||
typedef precision::lowp_uvec4 uvec4;
|
||||
#if(defined(GLM_PRECISION_HIGHP_UINT))
|
||||
typedef highp_uvec2 uvec2;
|
||||
typedef highp_uvec3 uvec3;
|
||||
typedef highp_uvec4 uvec4;
|
||||
#elif(defined(GLM_PRECISION_MEDIUMP_UINT))
|
||||
typedef mediump_uvec2 uvec2;
|
||||
typedef mediump_uvec3 uvec3;
|
||||
typedef mediump_uvec4 uvec4;
|
||||
#elif(defined(GLM_PRECISION_LOWP_UINT))
|
||||
typedef lowp_uvec2 uvec2;
|
||||
typedef lowp_uvec3 uvec3;
|
||||
typedef lowp_uvec4 uvec4;
|
||||
#else
|
||||
//! 2 components vector of unsigned integer numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_uvec2 uvec2;
|
||||
//! 2 components vector of unsigned integer numbers.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef mediump_uvec2 uvec2;
|
||||
|
||||
//! 3 components vector of unsigned integer numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_uvec3 uvec3;
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef mediump_uvec3 uvec3;
|
||||
|
||||
//! 4 components vector of unsigned integer numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_uvec4 uvec4;
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef mediump_uvec4 uvec4;
|
||||
#endif//GLM_PRECISION
|
||||
|
||||
//////////////////////////
|
||||
// Boolean definition
|
||||
|
||||
//! 2 components vector of boolean.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
//! 2 components vector of boolean.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef detail::tvec2<bool> bvec2;
|
||||
|
||||
//! 3 components vector of boolean.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef detail::tvec3<bool> bvec3;
|
||||
|
||||
//! 4 components vector of boolean.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef detail::tvec4<bool> bvec4;
|
||||
|
||||
//////////////////////////
|
||||
// Double definition
|
||||
|
||||
//! Vector of 2 double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
//! Vector of 2 double-precision floating-point numbers.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef detail::tvec2<double> dvec2;
|
||||
|
||||
//! Vector of 3 double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef detail::tvec3<double> dvec3;
|
||||
|
||||
//! Vector of 4 double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
typedef detail::tvec4<double> dvec4;
|
||||
|
||||
//! 2 * 2 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat2x2<double> dmat2;
|
||||
|
||||
//! 3 * 3 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat3x3<double> dmat3;
|
||||
|
||||
//! 4 * 4 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||
typedef detail::tmat4x4<double> dmat4;
|
||||
|
||||
//! 2 * 2 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat2x2<double> dmat2x2;
|
||||
|
||||
//! 2 * 3 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat2x3<double> dmat2x3;
|
||||
|
||||
//! 2 * 4 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat2x4<double> dmat2x4;
|
||||
|
||||
//! 3 * 2 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat3x2<double> dmat3x2;
|
||||
|
||||
//! 3 * 3 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat3x3<double> dmat3x3;
|
||||
|
||||
//! 3 * 4 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat3x4<double> dmat3x4;
|
||||
|
||||
//! 4 * 2 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat4x2<double> dmat4x2;
|
||||
|
||||
//! 4 * 3 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat4x3<double> dmat4x3;
|
||||
|
||||
//! 4 * 4 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||
typedef detail::tmat4x4<double> dmat4x4;
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#endif//glm_core_type
|
||||
|
||||
@@ -1,11 +1,30 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-22
|
||||
// Updated : 2010-02-08
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_float.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type_float.hpp
|
||||
/// @date 2008-08-22 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_float
|
||||
#define glm_core_type_float
|
||||
@@ -15,61 +34,51 @@
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
GLM_DETAIL_IS_FLOAT(detail::thalf);
|
||||
GLM_DETAIL_IS_FLOAT(float);
|
||||
GLM_DETAIL_IS_FLOAT(double);
|
||||
GLM_DETAIL_IS_FLOAT(long double);
|
||||
}
|
||||
//namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
|
||||
namespace precision
|
||||
{
|
||||
#ifdef GLM_USE_HALF_SCALAR
|
||||
typedef detail::thalf lowp_float_t;
|
||||
typedef detail::half lowp_float_t;
|
||||
#else//GLM_USE_HALF_SCALAR
|
||||
typedef float lowp_float_t;
|
||||
typedef float lowp_float_t;
|
||||
#endif//GLM_USE_HALF_SCALAR
|
||||
typedef float mediump_float_t;
|
||||
typedef double highp_float_t;
|
||||
typedef float mediump_float_t;
|
||||
typedef double highp_float_t;
|
||||
|
||||
//! Low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification
|
||||
//! \ingroup core_precision
|
||||
typedef lowp_float_t lowp_float;
|
||||
//! Medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification
|
||||
//! \ingroup core_precision
|
||||
typedef mediump_float_t mediump_float;
|
||||
//! High precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification
|
||||
//! \ingroup core_precision
|
||||
typedef highp_float_t highp_float;
|
||||
}
|
||||
//namespace precision
|
||||
/// @addtogroup core_precision
|
||||
/// @{
|
||||
|
||||
#ifndef GLM_PRECISION
|
||||
typedef precision::mediump_float float_t;
|
||||
#elif(GLM_PRECISION & GLM_PRECISION_HIGHP_FLOAT)
|
||||
typedef precision::highp_float float_t;
|
||||
#elif(GLM_PRECISION & GLM_PRECISION_MEDIUMP_FLOAT)
|
||||
typedef precision::mediump_float float_t;
|
||||
#elif(GLM_PRECISION & GLM_PRECISION_LOWP_FLOAT)
|
||||
typedef precision::lowp_float float_t;
|
||||
/// Low precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef lowp_float_t lowp_float;
|
||||
|
||||
/// Medium precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef mediump_float_t mediump_float;
|
||||
|
||||
/// High precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef highp_float_t highp_float;
|
||||
|
||||
#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
|
||||
typedef mediump_float float_t;
|
||||
#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
|
||||
typedef highp_float float_t;
|
||||
#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
|
||||
typedef mediump_float float_t;
|
||||
#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
|
||||
typedef lowp_float float_t;
|
||||
#else
|
||||
# pragma message("GLM message: Precisson undefined for float numbers.");
|
||||
typedef precision::mediump_float float_t;
|
||||
#endif//GLM_PRECISION
|
||||
# error "GLM error: multiple default precision requested for floating-point types"
|
||||
#endif
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#endif//glm_core_type_float
|
||||
|
||||
@@ -1,11 +1,30 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-10-05
|
||||
// Updated : 2010-01-26
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_gentype.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type_gentype.hpp
|
||||
/// @date 2008-10-05 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_gentype
|
||||
#define glm_core_type_gentype
|
||||
|
||||
@@ -1,347 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-10-05
|
||||
// Updated : 2008-10-05
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_gentype.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail{
|
||||
|
||||
/////////////////////////////////
|
||||
// Static functions
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::col_size()
|
||||
{
|
||||
return cT;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::row_size()
|
||||
{
|
||||
return rT;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::value_size()
|
||||
{
|
||||
return rT * cT;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
bool base<vT, cT, rT, pT>::is_scalar()
|
||||
{
|
||||
return rT == 1 && cT == 1;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
bool base<vT, cT, rT, pT>::is_vector()
|
||||
{
|
||||
return rT == 1;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
bool base<vT, cT, rT, pT>::is_matrix()
|
||||
{
|
||||
return rT != 1;
|
||||
}
|
||||
|
||||
/////////////////////////////////
|
||||
// Constructor
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
base<vT, cT, rT, pT>::base()
|
||||
{
|
||||
memset(&this->value, 0, cT * rT * sizeof(vT));
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
base<vT, cT, rT, pT>::base
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::class_type const & m
|
||||
)
|
||||
{
|
||||
for
|
||||
(
|
||||
typename genType<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||
i < base<vT, cT, rT, pT>::col_size();
|
||||
++i
|
||||
)
|
||||
{
|
||||
this->value[i] = m[i];
|
||||
}
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
base<vT, cT, rT, pT>::base
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::value_type const & x
|
||||
)
|
||||
{
|
||||
if(rT == 1) // vector
|
||||
{
|
||||
for
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||
i < base<vT, cT, rT, pT>::col_size();
|
||||
++i
|
||||
)
|
||||
{
|
||||
this->value[i][rT] = x;
|
||||
}
|
||||
}
|
||||
else // matrix
|
||||
{
|
||||
memset(&this->value, 0, cT * rT * sizeof(vT));
|
||||
|
||||
typename base<vT, cT, rT, pT>::size_type stop = cT < rT ? cT : rT;
|
||||
|
||||
for
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||
i < stop;
|
||||
++i
|
||||
)
|
||||
{
|
||||
this->value[i][i] = x;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
base<vT, cT, rT, pT>::base
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::value_type const * const x
|
||||
)
|
||||
{
|
||||
memcpy(&this->value, &x.value, cT * rT * sizeof(vT));
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
base<vT, cT, rT, pT>::base
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::col_type const * const x
|
||||
)
|
||||
{
|
||||
for
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||
i < base<vT, cT, rT, pT>::col_size();
|
||||
++i
|
||||
)
|
||||
{
|
||||
this->value[i] = x[i];
|
||||
}
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
template <typename vU, uint cU, uint rU, profile pU>
|
||||
base<vT, cT, rT, pT>::base
|
||||
(
|
||||
base<vU, cU, rU, pU> const & m
|
||||
)
|
||||
{
|
||||
for
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||
i < base<vT, cT, rT, pT>::col_size();
|
||||
++i
|
||||
)
|
||||
{
|
||||
this->value[i] = base<vT, cT, rT, pT>(m[i]);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::col_type& base<vT, cT, rT, pT>::operator[]
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::size_type i
|
||||
)
|
||||
{
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::col_type const & base<vT, cT, rT, pT>::operator[]
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::size_type i
|
||||
) const
|
||||
{
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary updatable operators
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::class_type const & x
|
||||
)
|
||||
{
|
||||
memcpy(&this->value, &x.value, cT * rT * sizeof(vT));
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::value_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] += x;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::class_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] += x[j][i];
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::value_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] -= x;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::class_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] -= x[j][i];
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::value_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] *= x;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::class_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] *= x[j][i];
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::value_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] /= x;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::class_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] /= x[j][i];
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator++ ()
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
++this->value[j][i];
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-- ()
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
--this->value[j][i];
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
} //namespace detail
|
||||
} //namespace glm
|
||||
@@ -1,85 +1,115 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-17
|
||||
// Updated : 2010-02-17
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_half.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type_half.hpp
|
||||
/// @date 2008-08-17 / 2011-09-20
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_half
|
||||
#define glm_core_type_half
|
||||
|
||||
#include <cstdlib>
|
||||
|
||||
namespace glm
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
namespace test
|
||||
typedef short hdata;
|
||||
|
||||
float toFloat32(hdata value);
|
||||
hdata toFloat16(float const & value);
|
||||
|
||||
class half
|
||||
{
|
||||
bool main_type_half();
|
||||
|
||||
}//namespace test
|
||||
|
||||
namespace detail
|
||||
{
|
||||
typedef short hdata;
|
||||
|
||||
float toFloat32(hdata value);
|
||||
hdata toFloat16(float const & value);
|
||||
|
||||
///16-bit floating point type.
|
||||
/// \ingroup gtc_half_float
|
||||
class thalf
|
||||
{
|
||||
public:
|
||||
// Constructors
|
||||
thalf();
|
||||
thalf(thalf const & s);
|
||||
public:
|
||||
// Constructors
|
||||
GLM_FUNC_DECL half();
|
||||
GLM_FUNC_DECL half(half const & s);
|
||||
|
||||
template <typename U>
|
||||
explicit thalf(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit half(U const & s);
|
||||
|
||||
// Cast
|
||||
//operator float();
|
||||
operator float() const;
|
||||
//operator double();
|
||||
//operator double() const;
|
||||
// Cast
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL operator U() const;
|
||||
|
||||
// Unary updatable operators
|
||||
thalf& operator= (thalf const & s);
|
||||
thalf& operator+=(thalf const & s);
|
||||
thalf& operator-=(thalf const & s);
|
||||
thalf& operator*=(thalf const & s);
|
||||
thalf& operator/=(thalf const & s);
|
||||
thalf& operator++();
|
||||
thalf& operator--();
|
||||
// Unary updatable operators
|
||||
GLM_FUNC_DECL half& operator= (half const & s);
|
||||
GLM_FUNC_DECL half& operator+=(half const & s);
|
||||
GLM_FUNC_DECL half& operator-=(half const & s);
|
||||
GLM_FUNC_DECL half& operator*=(half const & s);
|
||||
GLM_FUNC_DECL half& operator/=(half const & s);
|
||||
GLM_FUNC_DECL half& operator++();
|
||||
GLM_FUNC_DECL half& operator--();
|
||||
|
||||
float toFloat() const{return toFloat32(data);}
|
||||
GLM_FUNC_DECL float toFloat() const{return toFloat32(data);}
|
||||
|
||||
hdata _data() const{return data;}
|
||||
GLM_FUNC_DECL hdata _data() const{return data;}
|
||||
|
||||
private:
|
||||
hdata data;
|
||||
};
|
||||
private:
|
||||
hdata data;
|
||||
};
|
||||
|
||||
thalf operator+ (thalf const & s1, thalf const & s2);
|
||||
half operator+ (half const & s1, half const & s2);
|
||||
|
||||
thalf operator- (thalf const & s1, thalf const & s2);
|
||||
half operator- (half const & s1, half const & s2);
|
||||
|
||||
thalf operator* (thalf const & s1, thalf const & s2);
|
||||
half operator* (half const & s1, half const & s2);
|
||||
|
||||
thalf operator/ (thalf const & s1, thalf const & s2);
|
||||
half operator/ (half const & s1, half const & s2);
|
||||
|
||||
// Unary constant operators
|
||||
thalf operator- (thalf const & s);
|
||||
// Unary constant operators
|
||||
half operator- (half const & s);
|
||||
|
||||
thalf operator-- (thalf const & s, int);
|
||||
half operator-- (half const & s, int);
|
||||
|
||||
thalf operator++ (thalf const & s, int);
|
||||
half operator++ (half const & s, int);
|
||||
|
||||
}//namespace detail
|
||||
bool operator==(
|
||||
detail::half const & x,
|
||||
detail::half const & y);
|
||||
|
||||
bool operator!=(
|
||||
detail::half const & x,
|
||||
detail::half const & y);
|
||||
|
||||
bool operator<(
|
||||
detail::half const & x,
|
||||
detail::half const & y);
|
||||
|
||||
bool operator<=(
|
||||
detail::half const & x,
|
||||
detail::half const & y);
|
||||
|
||||
bool operator>(
|
||||
detail::half const & x,
|
||||
detail::half const & y);
|
||||
|
||||
bool operator>=(
|
||||
detail::half const & x,
|
||||
detail::half const & y);
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#include "type_half.inl"
|
||||
|
||||
@@ -1,22 +1,41 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-17
|
||||
// Updated : 2009-11-12
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_half.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright:
|
||||
// This half implementation is based on OpenEXR which is Copyright (c) 2002,
|
||||
// Industrial Light & Magic, a division of Lucas Digital Ltd. LLC
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// OpenGL Mathematics (glm.g-truc.net)
|
||||
///
|
||||
/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net)
|
||||
///
|
||||
/// This half implementation is based on OpenEXR which is Copyright (c) 2002,
|
||||
/// Industrial Light & Magic, a division of Lucas Digital Ltd. LLC
|
||||
///
|
||||
/// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
/// of this software and associated documentation files (the "Software"), to deal
|
||||
/// in the Software without restriction, including without limitation the rights
|
||||
/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
/// copies of the Software, and to permit persons to whom the Software is
|
||||
/// furnished to do so, subject 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/core/type_half.inl
|
||||
/// @date 2008-08-17 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "_detail.hpp"
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
inline float overflow()
|
||||
GLM_FUNC_QUALIFIER float overflow()
|
||||
{
|
||||
volatile float f = 1e10;
|
||||
|
||||
@@ -26,7 +45,7 @@ namespace detail
|
||||
return f;
|
||||
}
|
||||
|
||||
inline float toFloat32(hdata value)
|
||||
GLM_FUNC_QUALIFIER float toFloat32(hdata value)
|
||||
{
|
||||
int s = (value >> 15) & 0x00000001;
|
||||
int e = (value >> 10) & 0x0000001f;
|
||||
@@ -41,7 +60,7 @@ namespace detail
|
||||
//
|
||||
|
||||
detail::uif result;
|
||||
result.i = s << 31;
|
||||
result.i = (unsigned int)(s << 31);
|
||||
return result.f;
|
||||
}
|
||||
else
|
||||
@@ -69,7 +88,7 @@ namespace detail
|
||||
//
|
||||
|
||||
uif result;
|
||||
result.i = (s << 31) | 0x7f800000;
|
||||
result.i = (unsigned int)((s << 31) | 0x7f800000);
|
||||
return result.f;
|
||||
}
|
||||
else
|
||||
@@ -79,7 +98,7 @@ namespace detail
|
||||
//
|
||||
|
||||
uif result;
|
||||
result.i = (s << 31) | 0x7f800000 | (m << 13);
|
||||
result.i = (unsigned int)((s << 31) | 0x7f800000 | (m << 13));
|
||||
return result.f;
|
||||
}
|
||||
}
|
||||
@@ -96,15 +115,15 @@ namespace detail
|
||||
//
|
||||
|
||||
uif Result;
|
||||
Result.i = (s << 31) | (e << 23) | m;
|
||||
Result.i = (unsigned int)((s << 31) | (e << 23) | m);
|
||||
return Result.f;
|
||||
}
|
||||
|
||||
inline hdata toFloat16(float const & f)
|
||||
GLM_FUNC_QUALIFIER hdata toFloat16(float const & f)
|
||||
{
|
||||
uif Entry;
|
||||
Entry.f = f;
|
||||
int i = Entry.i;
|
||||
int i = (int)Entry.i;
|
||||
|
||||
//
|
||||
// Our floating point number, f, is represented by the bit
|
||||
@@ -133,7 +152,7 @@ namespace detail
|
||||
// less than half_MIN (f may be a small normalized
|
||||
// float, a denormalized float or a zero).
|
||||
//
|
||||
// We convert f to a _halfGTX zero.
|
||||
// We convert f to a half zero.
|
||||
//
|
||||
|
||||
return 0;
|
||||
@@ -143,7 +162,7 @@ namespace detail
|
||||
// E is between -10 and 0. F is a normalized float,
|
||||
// whose magnitude is less than __half_NRM_MIN.
|
||||
//
|
||||
// We convert f to a denormalized _halfGTX.
|
||||
// We convert f to a denormalized half.
|
||||
//
|
||||
|
||||
m = (m | 0x00800000) >> (1 - e);
|
||||
@@ -161,7 +180,7 @@ namespace detail
|
||||
m += 0x00002000;
|
||||
|
||||
//
|
||||
// Assemble the _halfGTX from s, e (zero) and m.
|
||||
// Assemble the half from s, e (zero) and m.
|
||||
//
|
||||
|
||||
return hdata(s | (m >> 13));
|
||||
@@ -235,122 +254,161 @@ namespace detail
|
||||
}
|
||||
}
|
||||
|
||||
inline thalf::thalf() :
|
||||
GLM_FUNC_QUALIFIER half::half() :
|
||||
data(0)
|
||||
{}
|
||||
|
||||
inline thalf::thalf(thalf const & s) :
|
||||
GLM_FUNC_QUALIFIER half::half(half const & s) :
|
||||
data(s.data)
|
||||
{}
|
||||
|
||||
template <typename U>
|
||||
inline thalf::thalf(U const & s) :
|
||||
GLM_FUNC_QUALIFIER half::half(U const & s) :
|
||||
data(toFloat16(float(s)))
|
||||
{}
|
||||
|
||||
// Cast
|
||||
//inline half::operator float()
|
||||
//{
|
||||
// return toFloat();
|
||||
//}
|
||||
|
||||
inline thalf::operator float() const
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER half::operator U() const
|
||||
{
|
||||
return toFloat();
|
||||
return static_cast<U>(toFloat32(this->data));
|
||||
}
|
||||
|
||||
//inline half::operator double()
|
||||
//{
|
||||
// return double(toFloat());
|
||||
//}
|
||||
|
||||
//inline half::operator double() const
|
||||
//{
|
||||
// return double(toFloat());
|
||||
//}
|
||||
|
||||
// Unary updatable operators
|
||||
inline thalf& thalf::operator= (thalf const & s)
|
||||
GLM_FUNC_QUALIFIER half& half::operator= (half const & s)
|
||||
{
|
||||
data = s.data;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline thalf& thalf::operator+=(thalf const & s)
|
||||
GLM_FUNC_QUALIFIER half& half::operator+=(half const & s)
|
||||
{
|
||||
data = toFloat16(toFloat32(data) + toFloat32(s.data));
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline thalf& thalf::operator-=(thalf const & s)
|
||||
GLM_FUNC_QUALIFIER half& half::operator-=(half const & s)
|
||||
{
|
||||
data = toFloat16(toFloat32(data) - toFloat32(s.data));
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline thalf& thalf::operator*=(thalf const & s)
|
||||
GLM_FUNC_QUALIFIER half& half::operator*=(half const & s)
|
||||
{
|
||||
data = toFloat16(toFloat32(data) * toFloat32(s.data));
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline thalf& thalf::operator/=(thalf const & s)
|
||||
GLM_FUNC_QUALIFIER half& half::operator/=(half const & s)
|
||||
{
|
||||
data = toFloat16(toFloat32(data) / toFloat32(s.data));
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline thalf& thalf::operator++()
|
||||
GLM_FUNC_QUALIFIER half& half::operator++()
|
||||
{
|
||||
float Casted = toFloat32(data);
|
||||
data = toFloat16(++Casted);
|
||||
this->data = toFloat16(++Casted);
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline thalf& thalf::operator--()
|
||||
GLM_FUNC_QUALIFIER half& half::operator--()
|
||||
{
|
||||
float Casted = toFloat32(data);
|
||||
data = toFloat16(--Casted);
|
||||
this->data = toFloat16(--Casted);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Binary arithmetic operators
|
||||
|
||||
inline detail::thalf operator+ (detail::thalf const & s1, detail::thalf const & s2)
|
||||
GLM_FUNC_QUALIFIER detail::half operator+ (detail::half const & s1, detail::half const & s2)
|
||||
{
|
||||
return detail::thalf(float(s1) + float(s2));
|
||||
return detail::half(float(s1) + float(s2));
|
||||
}
|
||||
|
||||
inline detail::thalf operator- (detail::thalf const & s1, detail::thalf const & s2)
|
||||
GLM_FUNC_QUALIFIER detail::half operator- (detail::half const & s1, detail::half const & s2)
|
||||
{
|
||||
return detail::thalf(float(s1) - float(s2));
|
||||
return detail::half(float(s1) - float(s2));
|
||||
}
|
||||
|
||||
inline detail::thalf operator* (detail::thalf const & s1, detail::thalf const & s2)
|
||||
GLM_FUNC_QUALIFIER detail::half operator* (detail::half const & s1, detail::half const & s2)
|
||||
{
|
||||
return detail::thalf(float(s1) * float(s2));
|
||||
return detail::half(float(s1) * float(s2));
|
||||
}
|
||||
|
||||
inline detail::thalf operator/ (detail::thalf const & s1, detail::thalf const & s2)
|
||||
GLM_FUNC_QUALIFIER detail::half operator/ (detail::half const & s1, detail::half const & s2)
|
||||
{
|
||||
return detail::thalf(float(s1) / float(s2));
|
||||
return detail::half(float(s1) / float(s2));
|
||||
}
|
||||
|
||||
// Unary constant operators
|
||||
inline detail::thalf operator- (detail::thalf const & s)
|
||||
GLM_FUNC_QUALIFIER detail::half operator- (detail::half const & s)
|
||||
{
|
||||
return detail::thalf(-float(s));
|
||||
return detail::half(-float(s));
|
||||
}
|
||||
|
||||
inline detail::thalf operator-- (detail::thalf const & s, int)
|
||||
GLM_FUNC_QUALIFIER detail::half operator-- (detail::half const & s, int)
|
||||
{
|
||||
return detail::thalf(float(s) - 1.0f);
|
||||
return detail::half(float(s) - 1.0f);
|
||||
}
|
||||
|
||||
inline detail::thalf operator++ (detail::thalf const & s, int)
|
||||
GLM_FUNC_QUALIFIER detail::half operator++ (detail::half const & s, int)
|
||||
{
|
||||
return detail::thalf(float(s) + 1.0f);
|
||||
return detail::half(float(s) + 1.0f);
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER bool operator==
|
||||
(
|
||||
detail::half const & x,
|
||||
detail::half const & y
|
||||
)
|
||||
{
|
||||
return x._data() == y._data();
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER bool operator!=
|
||||
(
|
||||
detail::half const & x,
|
||||
detail::half const & y
|
||||
)
|
||||
{
|
||||
return x._data() != y._data();
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER bool operator<
|
||||
(
|
||||
detail::half const & x,
|
||||
detail::half const & y
|
||||
)
|
||||
{
|
||||
return float(x) < float(y);
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER bool operator<=
|
||||
(
|
||||
detail::half const & x,
|
||||
detail::half const & y
|
||||
)
|
||||
{
|
||||
return float(x) <= float(y);
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER bool operator>
|
||||
(
|
||||
detail::half const & x,
|
||||
detail::half const & y
|
||||
)
|
||||
{
|
||||
return float(x) > float(y);
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER bool operator>=
|
||||
(
|
||||
detail::half const & x,
|
||||
detail::half const & y
|
||||
)
|
||||
{
|
||||
return float(x) >= float(y);
|
||||
}
|
||||
|
||||
}//namespace detail
|
||||
|
||||
@@ -1,11 +1,30 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-22
|
||||
// Updated : 2008-09-17
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_int.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type_int.hpp
|
||||
/// @date 2008-08-22 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_int
|
||||
#define glm_core_type_int
|
||||
@@ -13,104 +32,105 @@
|
||||
#include "setup.hpp"
|
||||
#include "_detail.hpp"
|
||||
|
||||
namespace glm
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
typedef signed short lowp_int_t;
|
||||
typedef signed int mediump_int_t;
|
||||
typedef sint64 highp_int_t;
|
||||
typedef signed short lowp_int_t;
|
||||
typedef signed int mediump_int_t;
|
||||
typedef sint64 highp_int_t;
|
||||
|
||||
typedef unsigned short lowp_uint_t;
|
||||
typedef unsigned int mediump_uint_t;
|
||||
typedef uint64 highp_uint_t;
|
||||
typedef unsigned short lowp_uint_t;
|
||||
typedef unsigned int mediump_uint_t;
|
||||
typedef uint64 highp_uint_t;
|
||||
|
||||
GLM_DETAIL_IS_INT(signed char);
|
||||
GLM_DETAIL_IS_INT(signed short);
|
||||
GLM_DETAIL_IS_INT(signed int);
|
||||
GLM_DETAIL_IS_INT(signed long);
|
||||
GLM_DETAIL_IS_INT(highp_int_t);
|
||||
GLM_DETAIL_IS_INT(signed char);
|
||||
GLM_DETAIL_IS_INT(signed short);
|
||||
GLM_DETAIL_IS_INT(signed int);
|
||||
GLM_DETAIL_IS_INT(signed long);
|
||||
GLM_DETAIL_IS_INT(highp_int_t);
|
||||
|
||||
GLM_DETAIL_IS_UINT(unsigned char);
|
||||
GLM_DETAIL_IS_UINT(unsigned short);
|
||||
GLM_DETAIL_IS_UINT(unsigned int);
|
||||
GLM_DETAIL_IS_UINT(unsigned long);
|
||||
GLM_DETAIL_IS_UINT(highp_uint_t);
|
||||
}
|
||||
//namespace detail
|
||||
GLM_DETAIL_IS_UINT(unsigned char);
|
||||
GLM_DETAIL_IS_UINT(unsigned short);
|
||||
GLM_DETAIL_IS_UINT(unsigned int);
|
||||
GLM_DETAIL_IS_UINT(unsigned long);
|
||||
GLM_DETAIL_IS_UINT(highp_uint_t);
|
||||
}//namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
/// @addtogroup core_precision
|
||||
/// @{
|
||||
|
||||
///namespace for precision stuff.
|
||||
namespace precision
|
||||
{
|
||||
//! Low precision signed integer.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::lowp_int_t lowp_int;
|
||||
//! Medium precision signed integer.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::mediump_int_t mediump_int;
|
||||
//! High precision signed integer.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::highp_int_t highp_int;
|
||||
/// Low precision signed integer.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::lowp_int_t lowp_int;
|
||||
|
||||
//! Low precision unsigned integer.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::lowp_uint_t lowp_uint;
|
||||
//! Medium precision unsigned integer.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::mediump_uint_t mediump_uint;
|
||||
//! High precision unsigned integer.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::highp_uint_t highp_uint;
|
||||
}
|
||||
//namespace precision
|
||||
/// Medium precision signed integer.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::mediump_int_t mediump_int;
|
||||
|
||||
#ifndef GLM_PRECISION
|
||||
typedef precision::mediump_int int_t;
|
||||
#elif(GLM_PRECISION & GLM_PRECISION_HIGHP_INT)
|
||||
typedef precision::highp_int int_t;
|
||||
#elif(GLM_PRECISION & GLM_PRECISION_MEDIUMP_INT)
|
||||
typedef precision::mediump_int int_t;
|
||||
#elif(GLM_PRECISION & GLM_PRECISION_LOWP_INT)
|
||||
typedef precision::lowp_int int_t;
|
||||
/// High precision signed integer.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::highp_int_t highp_int;
|
||||
|
||||
/// Low precision unsigned integer.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::lowp_uint_t lowp_uint;
|
||||
|
||||
/// Medium precision unsigned integer.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::mediump_uint_t mediump_uint;
|
||||
|
||||
/// High precision unsigned integer.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::highp_uint_t highp_uint;
|
||||
|
||||
#if(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
|
||||
typedef mediump_int int_t;
|
||||
#elif(defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
|
||||
typedef highp_int int_t;
|
||||
#elif(!defined(GLM_PRECISION_HIGHP_INT) && defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
|
||||
typedef mediump_int int_t;
|
||||
#elif(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && defined(GLM_PRECISION_LOWP_INT))
|
||||
typedef lowp_int int_t;
|
||||
#else
|
||||
typedef mediump_int int_t;
|
||||
# pragma message("GLM message: Precisson undefined for signed integer number.");
|
||||
#endif//GLM_PRECISION
|
||||
# error "GLM error: multiple default precision requested for signed interger types"
|
||||
#endif
|
||||
|
||||
#ifndef GLM_PRECISION
|
||||
typedef precision::mediump_uint uint_t;
|
||||
#elif(GLM_PRECISION & GLM_PRECISION_HIGHP_UINT)
|
||||
typedef precision::highp_uint uint_t;
|
||||
#elif(GLM_PRECISION & GLM_PRECISION_MEDIUMP_UINT)
|
||||
typedef precision::mediump_uint uint_t;
|
||||
#elif(GLM_PRECISION & GLM_PRECISION_LOWP_UINT)
|
||||
typedef precision::lowp_uint uint_t;
|
||||
#if(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
|
||||
typedef mediump_uint uint_t;
|
||||
#elif(defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
|
||||
typedef highp_uint uint_t;
|
||||
#elif(!defined(GLM_PRECISION_HIGHP_UINT) && defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
|
||||
typedef mediump_uint uint_t;
|
||||
#elif(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && defined(GLM_PRECISION_LOWP_UINT))
|
||||
typedef lowp_uint uint_t;
|
||||
#else
|
||||
typedef precision::mediump_uint uint_t;
|
||||
# pragma message("GLM message: Precisson undefined for unsigned integer number.");
|
||||
#endif//GLM_PRECISION
|
||||
# error "GLM error: multiple default precision requested for unsigned interger types"
|
||||
#endif
|
||||
|
||||
//! Unsigned integer.
|
||||
//! From GLSL 1.30.8 specification section 4.1.3 Integers.
|
||||
/// Unsigned integer type.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
|
||||
typedef uint_t uint;
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#endif//glm_core_type_int
|
||||
|
||||
@@ -1,11 +1,30 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-01-26
|
||||
// Updated : 2010-01-26
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type_mat.hpp
|
||||
/// @date 2010-01-26 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_mat
|
||||
#define glm_core_type_mat
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type_mat.inl
|
||||
/// @date 2011-06-15 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -1,251 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2005-01-27
|
||||
// Updated : 2010-02-11
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat2x2.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_mat2x2
|
||||
#define glm_core_type_mat2x2
|
||||
|
||||
#include "type_mat.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
void main_mat2x2();
|
||||
}//namespace test
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
template <typename T> struct tmat2x2;
|
||||
template <typename T> struct tmat2x3;
|
||||
template <typename T> struct tmat2x4;
|
||||
template <typename T> struct tmat3x2;
|
||||
template <typename T> struct tmat3x3;
|
||||
template <typename T> struct tmat3x4;
|
||||
template <typename T> struct tmat4x2;
|
||||
template <typename T> struct tmat4x3;
|
||||
template <typename T> struct tmat4x4;
|
||||
|
||||
//! \brief Template for 2 * 2 matrix of floating-point numbers.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tmat2x2
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec2<T> col_type;
|
||||
typedef tvec2<T> row_type;
|
||||
static size_type col_size();
|
||||
static size_type row_size();
|
||||
|
||||
typedef tmat2x2<T> type;
|
||||
typedef tmat2x2<T> transpose_type;
|
||||
|
||||
public:
|
||||
// Implementation detail
|
||||
tmat2x2<T> _inverse() const;
|
||||
|
||||
private:
|
||||
// Data
|
||||
col_type value[2];
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
tmat2x2();
|
||||
tmat2x2(
|
||||
tmat2x2 const & m);
|
||||
|
||||
explicit tmat2x2(
|
||||
ctor Null);
|
||||
explicit tmat2x2(
|
||||
value_type const & x);
|
||||
explicit tmat2x2(
|
||||
value_type const & x1, value_type const & y1,
|
||||
value_type const & x2, value_type const & y2);
|
||||
explicit tmat2x2(
|
||||
col_type const & v1,
|
||||
col_type const & v2);
|
||||
|
||||
// Conversions
|
||||
template <typename U>
|
||||
explicit tmat2x2(tmat2x2<U> const & m);
|
||||
|
||||
explicit tmat2x2(tmat3x3<T> const & x);
|
||||
explicit tmat2x2(tmat4x4<T> const & x);
|
||||
explicit tmat2x2(tmat2x3<T> const & x);
|
||||
explicit tmat2x2(tmat3x2<T> const & x);
|
||||
explicit tmat2x2(tmat2x4<T> const & x);
|
||||
explicit tmat2x2(tmat4x2<T> const & x);
|
||||
explicit tmat2x2(tmat3x4<T> const & x);
|
||||
explicit tmat2x2(tmat4x3<T> const & x);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
col_type & operator[](size_type i);
|
||||
col_type const & operator[](size_type i) const;
|
||||
|
||||
// Unary updatable operators
|
||||
tmat2x2<T> & operator=(tmat2x2<T> const & m);
|
||||
template <typename U>
|
||||
tmat2x2<T> & operator=(tmat2x2<U> const & m);
|
||||
template <typename U>
|
||||
tmat2x2<T> & operator+=(U const & s);
|
||||
template <typename U>
|
||||
tmat2x2<T> & operator+=(tmat2x2<U> const & m);
|
||||
template <typename U>
|
||||
tmat2x2<T> & operator-=(U const & s);
|
||||
template <typename U>
|
||||
tmat2x2<T> & operator-=(tmat2x2<U> const & m);
|
||||
template <typename U>
|
||||
tmat2x2<T> & operator*=(U const & s);
|
||||
template <typename U>
|
||||
tmat2x2<T> & operator*=(tmat2x2<U> const & m);
|
||||
template <typename U>
|
||||
tmat2x2<T> & operator/=(U const & s);
|
||||
template <typename U>
|
||||
tmat2x2<T> & operator/=(tmat2x2<U> const & m);
|
||||
tmat2x2<T> & operator++();
|
||||
tmat2x2<T> & operator--();
|
||||
};
|
||||
|
||||
// Binary operators
|
||||
template <typename T>
|
||||
tmat2x2<T> operator+ (
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator+ (
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator+ (
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator- (
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator- (
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator- (
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator* (
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator* (
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x2<T>::col_type operator* (
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x2<T>::row_type operator* (
|
||||
typename tmat2x2<T>::col_type const & v,
|
||||
tmat2x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator* (
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator/ (
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator/ (
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x2<T>::col_type operator/ (
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x2<T>::row_type operator/ (
|
||||
typename tmat2x2<T>::col_type const & v,
|
||||
tmat2x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator/ (
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2);
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
tmat2x2<T> const operator- (
|
||||
tmat2x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> const operator-- (
|
||||
tmat2x2<T> const & m,
|
||||
int);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> const operator++ (
|
||||
tmat2x2<T> const & m,
|
||||
int);
|
||||
|
||||
} //namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
|
||||
namespace precision
|
||||
{
|
||||
//! 2 columns of 2 components matrix of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat2x2<lowp_float> lowp_mat2x2;
|
||||
//! 2 columns of 2 components matrix of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat2x2<mediump_float> mediump_mat2x2;
|
||||
//! 2 columns of 2 components matrix of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat2x2<highp_float> highp_mat2x2;
|
||||
}
|
||||
//namespace precision
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
} //namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_mat2x2.inl"
|
||||
#endif
|
||||
|
||||
#endif //glm_core_type_mat2x2
|
||||
@@ -1,610 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2005-01-16
|
||||
// Updated : 2010-02-11
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat2x2.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
inline typename tmat2x2<T>::size_type tmat2x2<T>::col_size()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat2x2<T>::size_type tmat2x2<T>::row_size()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat2x2<T>::col_type &
|
||||
tmat2x2<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
)
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat2x2<T>::col_type const &
|
||||
tmat2x2<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
) const
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Constructors
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>::tmat2x2()
|
||||
{
|
||||
this->value[0] = col_type(1, 0);
|
||||
this->value[1] = col_type(0, 1);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m.value[0];
|
||||
this->value[1] = m.value[1];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>::tmat2x2
|
||||
(
|
||||
ctor
|
||||
)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>::tmat2x2
|
||||
(
|
||||
value_type const & s
|
||||
)
|
||||
{
|
||||
value_type const Zero(0);
|
||||
this->value[0] = col_type(s, Zero);
|
||||
this->value[1] = col_type(Zero, s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>::tmat2x2
|
||||
(
|
||||
value_type const & x0, value_type const & y0,
|
||||
value_type const & x1, value_type const & y1
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(x0, y0);
|
||||
this->value[1] = col_type(x1, y1);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>::tmat2x2
|
||||
(
|
||||
col_type const & v0,
|
||||
col_type const & v1
|
||||
)
|
||||
{
|
||||
this->value[0] = v0;
|
||||
this->value[1] = v1;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// mat2 conversions
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat2x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> tmat2x2<T>::_inverse() const
|
||||
{
|
||||
typename tmat2x2<T>::value_type Determinant = this->value[0][0] * this->value[1][1] - this->value[1][0] * this->value[0][1];
|
||||
|
||||
tmat2x2<T> Inverse(
|
||||
+ this->value[1][1] / Determinant,
|
||||
- this->value[1][0] / Determinant,
|
||||
- this->value[0][1] / Determinant,
|
||||
+ this->value[0][0] / Determinant);
|
||||
return Inverse;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// mat3 operators
|
||||
|
||||
// This function shouldn't required but it seems that VC7.1 have an optimisation bug if this operator wasn't declared
|
||||
template <typename T>
|
||||
inline tmat2x2<T>& tmat2x2<T>::operator=
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x2<T>& tmat2x2<T>::operator=
|
||||
(
|
||||
tmat2x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x2<T>& tmat2x2<T>::operator+=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] += s;
|
||||
this->value[1] += s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x2<T>& tmat2x2<T>::operator+=
|
||||
(
|
||||
tmat2x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] += m[0];
|
||||
this->value[1] += m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x2<T>& tmat2x2<T>::operator-=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] -= s;
|
||||
this->value[1] -= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x2<T>& tmat2x2<T>::operator-=
|
||||
(
|
||||
tmat2x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] -= m[0];
|
||||
this->value[1] -= m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x2<T>& tmat2x2<T>::operator*=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] *= s;
|
||||
this->value[1] *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x2<T>& tmat2x2<T>::operator*=
|
||||
(
|
||||
tmat2x2<U> const & m
|
||||
)
|
||||
{
|
||||
return (*this = *this * m);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x2<T>& tmat2x2<T>::operator/=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] /= s;
|
||||
this->value[1] /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x2<T>& tmat2x2<T>::operator/=
|
||||
(
|
||||
tmat2x2<U> const & m
|
||||
)
|
||||
{
|
||||
return (*this = *this / m);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>& tmat2x2<T>::operator++ ()
|
||||
{
|
||||
++this->value[0];
|
||||
++this->value[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T>& tmat2x2<T>::operator-- ()
|
||||
{
|
||||
--this->value[0];
|
||||
--this->value[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Binary operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> operator+
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] + s,
|
||||
m[1] + s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> operator+
|
||||
(
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] + s,
|
||||
m[1] + s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> operator+
|
||||
(
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m1[0] + m2[0],
|
||||
m1[1] + m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> operator-
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] - s,
|
||||
m[1] - s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> operator-
|
||||
(
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
s - m[0],
|
||||
s - m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> operator-
|
||||
(
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m1[0] - m2[0],
|
||||
m1[1] - m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> operator*
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] * s,
|
||||
m[1] * s);
|
||||
}
|
||||
|
||||
// X
|
||||
// X
|
||||
// X X
|
||||
// X X
|
||||
template <typename T>
|
||||
inline tmat2x2<T> operator*
|
||||
(
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] * s,
|
||||
m[1] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat2x2<T>::col_type operator*
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::row_type const & v
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
m[0][0] * v.x + m[1][0] * v.y,
|
||||
m[0][1] * v.x + m[1][1] * v.y);
|
||||
}
|
||||
|
||||
// X X
|
||||
// X X
|
||||
// X X
|
||||
template <typename T>
|
||||
inline typename tmat2x2<T>::row_type operator*
|
||||
(
|
||||
typename tmat2x2<T>::col_type const & v,
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
v.x * m[0][0] + v.y * m[0][1],
|
||||
v.x * m[1][0] + v.y * m[1][1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> operator*
|
||||
(
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
|
||||
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
|
||||
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
|
||||
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> operator/
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] / s,
|
||||
m[1] / s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> operator/
|
||||
(
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
s / m[0],
|
||||
s / m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat2x2<T>::col_type operator/
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::row_type & v
|
||||
)
|
||||
{
|
||||
return m._inverse() * v;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat2x2<T>::row_type operator/
|
||||
(
|
||||
typename tmat2x2<T>::col_type const & v,
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
return v * m._inverse();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> operator/
|
||||
(
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return m1 * m2._inverse();
|
||||
}
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
inline tmat2x2<T> const operator-
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
-m[0],
|
||||
-m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> const operator++
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] + T(1),
|
||||
m[1] + T(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> const operator--
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] - T(1),
|
||||
m[1] - T(1));
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Boolean operators
|
||||
|
||||
template <typename T>
|
||||
inline bool operator==
|
||||
(
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] == m2[0]) && (m1[1] == m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline bool operator!=
|
||||
(
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] != m2[0]) || (m1[1] != m2[1]);
|
||||
}
|
||||
|
||||
} //namespace detail
|
||||
} //namespace glm
|
||||
@@ -1,218 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-10-01
|
||||
// Updated : 2010-02-03
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat2x3.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_mat2x3
|
||||
#define glm_core_type_mat2x3
|
||||
|
||||
#include "type_mat.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
void main_mat2x3();
|
||||
}//namespace test
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
template <typename T> struct tmat2x2;
|
||||
template <typename T> struct tmat2x3;
|
||||
template <typename T> struct tmat2x4;
|
||||
template <typename T> struct tmat3x2;
|
||||
template <typename T> struct tmat3x3;
|
||||
template <typename T> struct tmat3x4;
|
||||
template <typename T> struct tmat4x2;
|
||||
template <typename T> struct tmat4x3;
|
||||
template <typename T> struct tmat4x4;
|
||||
|
||||
//! \brief Template for 2 columns and 3 rows matrix of floating-point numbers.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tmat2x3
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec3<T> col_type;
|
||||
typedef tvec2<T> row_type;
|
||||
static size_type col_size();
|
||||
static size_type row_size();
|
||||
|
||||
typedef tmat2x3<T> type;
|
||||
typedef tmat3x2<T> transpose_type;
|
||||
|
||||
private:
|
||||
// Data
|
||||
col_type value[2];
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
tmat2x3();
|
||||
tmat2x3(tmat2x3 const & m);
|
||||
|
||||
explicit tmat2x3(
|
||||
ctor);
|
||||
explicit tmat2x3(
|
||||
value_type const & s);
|
||||
explicit tmat2x3(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1);
|
||||
explicit tmat2x3(
|
||||
col_type const & v0,
|
||||
col_type const & v1);
|
||||
|
||||
// Conversion
|
||||
template <typename U>
|
||||
explicit tmat2x3(tmat2x3<U> const & m);
|
||||
|
||||
explicit tmat2x3(tmat2x2<T> const & x);
|
||||
explicit tmat2x3(tmat3x3<T> const & x);
|
||||
explicit tmat2x3(tmat4x4<T> const & x);
|
||||
explicit tmat2x3(tmat2x4<T> const & x);
|
||||
explicit tmat2x3(tmat3x2<T> const & x);
|
||||
explicit tmat2x3(tmat3x4<T> const & x);
|
||||
explicit tmat2x3(tmat4x2<T> const & x);
|
||||
explicit tmat2x3(tmat4x3<T> const & x);
|
||||
|
||||
// Accesses
|
||||
col_type & operator[](size_type i);
|
||||
col_type const & operator[](size_type i) const;
|
||||
|
||||
// Unary updatable operators
|
||||
tmat2x3<T> & operator= (tmat2x3<T> const & m);
|
||||
template <typename U>
|
||||
tmat2x3<T> & operator= (tmat2x3<U> const & m);
|
||||
template <typename U>
|
||||
tmat2x3<T> & operator+= (U const & s);
|
||||
template <typename U>
|
||||
tmat2x3<T> & operator+= (tmat2x3<U> const & m);
|
||||
template <typename U>
|
||||
tmat2x3<T> & operator-= (U const & s);
|
||||
template <typename U>
|
||||
tmat2x3<T> & operator-= (tmat2x3<U> const & m);
|
||||
template <typename U>
|
||||
tmat2x3<T> & operator*= (U const & s);
|
||||
template <typename U>
|
||||
tmat2x3<T> & operator*= (tmat2x3<U> const & m);
|
||||
template <typename U>
|
||||
tmat2x3<T> & operator/= (U const & s);
|
||||
|
||||
tmat2x3<T> & operator++ ();
|
||||
tmat2x3<T> & operator-- ();
|
||||
};
|
||||
|
||||
// Binary operators
|
||||
template <typename T>
|
||||
tmat2x3<T> operator+ (
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> operator+ (
|
||||
tmat2x3<T> const & m1,
|
||||
tmat2x3<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> operator- (
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> operator- (
|
||||
tmat2x3<T> const & m1,
|
||||
tmat2x3<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> operator* (
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> operator* (
|
||||
typename tmat2x3<T>::value_type const & s,
|
||||
tmat2x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x3<T>::col_type operator* (
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x3<T>::row_type operator* (
|
||||
typename tmat2x3<T>::col_type const & v,
|
||||
tmat2x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> operator* (
|
||||
tmat2x3<T> const & m1,
|
||||
tmat3x2<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> operator/ (
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> operator/ (
|
||||
typename tmat2x3<T>::value_type const & s,
|
||||
tmat2x3<T> const & m);
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
tmat2x3<T> const operator- (
|
||||
tmat2x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> const operator-- (
|
||||
tmat2x3<T> const & m,
|
||||
int);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> const operator++ (
|
||||
tmat2x3<T> const & m,
|
||||
int);
|
||||
|
||||
} //namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
|
||||
namespace precision
|
||||
{
|
||||
//! 2 columns of 3 components matrix of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat2x3<lowp_float> lowp_mat2x3;
|
||||
//! 2 columns of 3 components matrix of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat2x3<mediump_float> mediump_mat2x3;
|
||||
//! 2 columns of 3 components matrix of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat2x3<highp_float> highp_mat2x3;
|
||||
}
|
||||
//namespace precision
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
} //namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_mat2x3.inl"
|
||||
#endif
|
||||
|
||||
#endif //glm_core_type_mat2x3
|
||||
@@ -1,541 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-08-05
|
||||
// Updated : 2010-02-03
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat2x3.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
inline typename tmat2x3<T>::size_type tmat2x3<T>::col_size()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat2x3<T>::size_type tmat2x3<T>::row_size()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat2x3<T>::col_type &
|
||||
tmat2x3<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
)
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat2x3<T>::col_type const &
|
||||
tmat2x3<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
) const
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Constructors
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>::tmat2x3()
|
||||
{
|
||||
this->value[0] = col_type(T(1), T(0), T(0));
|
||||
this->value[1] = col_type(T(0), T(1), T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m.value[0];
|
||||
this->value[1] = m.value[1];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>::tmat2x3
|
||||
(
|
||||
ctor
|
||||
)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>::tmat2x3
|
||||
(
|
||||
value_type const & s
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(s, T(0), T(0));
|
||||
this->value[1] = col_type(T(0), s, T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>::tmat2x3
|
||||
(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(x0, y0, z0);
|
||||
this->value[1] = col_type(x1, y1, z1);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>::tmat2x3
|
||||
(
|
||||
col_type const & v0,
|
||||
col_type const & v1
|
||||
)
|
||||
{
|
||||
this->value[0] = v0;
|
||||
this->value[1] = v1;
|
||||
}
|
||||
|
||||
// Conversion
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat2x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Unary updatable operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T>& tmat2x3<T>::operator=
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x3<T>& tmat2x3<T>::operator=
|
||||
(
|
||||
tmat2x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x3<T> & tmat2x3<T>::operator+=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] += s;
|
||||
this->value[1] += s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x3<T>& tmat2x3<T>::operator+=
|
||||
(
|
||||
tmat2x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] += m[0];
|
||||
this->value[1] += m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x3<T>& tmat2x3<T>::operator-=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] -= s;
|
||||
this->value[1] -= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x3<T>& tmat2x3<T>::operator-=
|
||||
(
|
||||
tmat2x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] -= m[0];
|
||||
this->value[1] -= m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x3<T>& tmat2x3<T>::operator*=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] *= s;
|
||||
this->value[1] *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x3<T> & tmat2x3<T>::operator*=
|
||||
(
|
||||
tmat2x3<U> const & m
|
||||
)
|
||||
{
|
||||
return (*this = tmat2x3<U>(*this * m));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x3<T> & tmat2x3<T>::operator/=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] /= s;
|
||||
this->value[1] /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T> & tmat2x3<T>::operator++ ()
|
||||
{
|
||||
++this->value[0];
|
||||
++this->value[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T> & tmat2x3<T>::operator-- ()
|
||||
{
|
||||
--this->value[0];
|
||||
--this->value[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Binary operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T> operator+
|
||||
(
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m[0] + s,
|
||||
m[1] + s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T> operator+
|
||||
(
|
||||
tmat2x3<T> const & m1,
|
||||
tmat2x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m1[0] + m2[0],
|
||||
m1[1] + m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T> operator-
|
||||
(
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m[0] - s,
|
||||
m[1] - s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T> operator-
|
||||
(
|
||||
tmat2x3<T> const & m1,
|
||||
tmat2x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m1[0] - m2[0],
|
||||
m1[1] - m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T> operator*
|
||||
(
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m[0] * s,
|
||||
m[1] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T> operator*
|
||||
(
|
||||
typename tmat2x3<T>::value_type const & s,
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m[0] * s,
|
||||
m[1] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat2x3<T>::col_type operator*
|
||||
(
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::row_type const & v)
|
||||
{
|
||||
return typename tmat2x3<T>::col_type(
|
||||
m[0][0] * v.x + m[1][0] * v.y,
|
||||
m[0][1] * v.x + m[1][1] * v.y,
|
||||
m[0][2] * v.x + m[1][2] * v.y);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat2x3<T>::row_type operator*
|
||||
(
|
||||
typename tmat2x3<T>::col_type const & v,
|
||||
tmat2x3<T> const & m)
|
||||
{
|
||||
return typename tmat2x3<T>::row_type(
|
||||
v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2],
|
||||
v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> operator*
|
||||
(
|
||||
tmat2x3<T> const & m1,
|
||||
tmat3x2<T> const & m2
|
||||
)
|
||||
{
|
||||
typename tmat2x3<T>::value_type SrcA00 = m1[0][0];
|
||||
typename tmat2x3<T>::value_type SrcA01 = m1[0][1];
|
||||
typename tmat2x3<T>::value_type SrcA02 = m1[0][2];
|
||||
typename tmat2x3<T>::value_type SrcA10 = m1[1][0];
|
||||
typename tmat2x3<T>::value_type SrcA11 = m1[1][1];
|
||||
typename tmat2x3<T>::value_type SrcA12 = m1[1][2];
|
||||
|
||||
typename tmat2x3<T>::value_type SrcB00 = m2[0][0];
|
||||
typename tmat2x3<T>::value_type SrcB01 = m2[0][1];
|
||||
typename tmat2x3<T>::value_type SrcB10 = m2[1][0];
|
||||
typename tmat2x3<T>::value_type SrcB11 = m2[1][1];
|
||||
typename tmat2x3<T>::value_type SrcB20 = m2[2][0];
|
||||
typename tmat2x3<T>::value_type SrcB21 = m2[2][1];
|
||||
|
||||
tmat3x3<T> Result(tmat3x3<T>::null);
|
||||
Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01;
|
||||
Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01;
|
||||
Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01;
|
||||
Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11;
|
||||
Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11;
|
||||
Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11;
|
||||
Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21;
|
||||
Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21;
|
||||
Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T> operator/
|
||||
(
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m[0] / s,
|
||||
m[1] / s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T> operator/
|
||||
(
|
||||
typename tmat2x3<T>::value_type const & s,
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
s / m[0],
|
||||
s / m[1]);
|
||||
}
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
inline tmat2x3<T> const operator-
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
-m[0],
|
||||
-m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T> const operator++
|
||||
(
|
||||
tmat2x3<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m[0] + typename tmat2x3<T>::value_type(1),
|
||||
m[1] + typename tmat2x3<T>::value_type(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x3<T> const operator--
|
||||
(
|
||||
tmat2x3<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m[0] - typename tmat2x3<T>::value_type(1),
|
||||
m[1] - typename tmat2x3<T>::value_type(1));
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Boolean operators
|
||||
|
||||
template <typename T>
|
||||
inline bool operator==
|
||||
(
|
||||
tmat2x3<T> const & m1,
|
||||
tmat2x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] == m2[0]) && (m1[1] == m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline bool operator!=
|
||||
(
|
||||
tmat2x3<T> const & m1,
|
||||
tmat2x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] != m2[0]) || (m1[1] != m2[1]);
|
||||
}
|
||||
|
||||
} //namespace detail
|
||||
} //namespace glm
|
||||
@@ -1,215 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-08-05
|
||||
// Updated : 2010-02-11
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat2x4.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_mat2x4
|
||||
#define glm_core_type_mat2x4
|
||||
|
||||
#include "type_mat.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
void main_mat2x4();
|
||||
}//namespace test
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
template <typename T> struct tmat2x2;
|
||||
template <typename T> struct tmat2x3;
|
||||
template <typename T> struct tmat2x4;
|
||||
template <typename T> struct tmat3x2;
|
||||
template <typename T> struct tmat3x3;
|
||||
template <typename T> struct tmat3x4;
|
||||
template <typename T> struct tmat4x2;
|
||||
template <typename T> struct tmat4x3;
|
||||
template <typename T> struct tmat4x4;
|
||||
|
||||
//! Template for 2 columns and 4 rows matrix of floating-point numbers.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tmat2x4
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec4<T> col_type;
|
||||
typedef tvec2<T> row_type;
|
||||
static size_type col_size();
|
||||
static size_type row_size();
|
||||
|
||||
typedef tmat2x4<T> type;
|
||||
typedef tmat4x2<T> transpose_type;
|
||||
|
||||
private:
|
||||
// Data
|
||||
col_type value[2];
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
tmat2x4();
|
||||
tmat2x4(tmat2x4 const & m);
|
||||
|
||||
explicit tmat2x4(
|
||||
ctor);
|
||||
explicit tmat2x4(
|
||||
value_type const & s);
|
||||
explicit tmat2x4(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1);
|
||||
explicit tmat2x4(
|
||||
col_type const & v0,
|
||||
col_type const & v1);
|
||||
|
||||
// Conversion
|
||||
template <typename U>
|
||||
explicit tmat2x4(tmat2x4<U> const & m);
|
||||
|
||||
explicit tmat2x4(tmat2x2<T> const & x);
|
||||
explicit tmat2x4(tmat3x3<T> const & x);
|
||||
explicit tmat2x4(tmat4x4<T> const & x);
|
||||
explicit tmat2x4(tmat2x3<T> const & x);
|
||||
explicit tmat2x4(tmat3x2<T> const & x);
|
||||
explicit tmat2x4(tmat3x4<T> const & x);
|
||||
explicit tmat2x4(tmat4x2<T> const & x);
|
||||
explicit tmat2x4(tmat4x3<T> const & x);
|
||||
|
||||
// Accesses
|
||||
col_type & operator[](size_type i);
|
||||
col_type const & operator[](size_type i) const;
|
||||
|
||||
// Unary updatable operators
|
||||
tmat2x4<T>& operator= (tmat2x4<T> const & m);
|
||||
template <typename U>
|
||||
tmat2x4<T>& operator= (tmat2x4<U> const & m);
|
||||
template <typename U>
|
||||
tmat2x4<T>& operator+= (U const & s);
|
||||
template <typename U>
|
||||
tmat2x4<T>& operator+= (tmat2x4<U> const & m);
|
||||
template <typename U>
|
||||
tmat2x4<T>& operator-= (U const & s);
|
||||
template <typename U>
|
||||
tmat2x4<T>& operator-= (tmat2x4<U> const & m);
|
||||
template <typename U>
|
||||
tmat2x4<T>& operator*= (U const & s);
|
||||
template <typename U>
|
||||
tmat2x4<T>& operator*= (tmat2x4<U> const & m);
|
||||
template <typename U>
|
||||
tmat2x4<T>& operator/= (U const & s);
|
||||
|
||||
tmat2x4<T>& operator++ ();
|
||||
tmat2x4<T>& operator-- ();
|
||||
};
|
||||
|
||||
// Binary operators
|
||||
template <typename T>
|
||||
tmat2x4<T> operator+ (
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator+ (
|
||||
tmat2x4<T> const & m1,
|
||||
tmat2x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator- (
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator- (
|
||||
tmat2x4<T> const & m1,
|
||||
tmat2x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator* (
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator* (
|
||||
typename tmat2x4<T>::value_type const & s,
|
||||
tmat2x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x4<T>::col_type operator* (
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x4<T>::row_type operator* (
|
||||
typename tmat2x4<T>::col_type const & v,
|
||||
tmat2x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator* (
|
||||
tmat2x4<T> const & m1,
|
||||
tmat2x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator/ (
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator/ (
|
||||
typename tmat2x4<T>::value_type const & s,
|
||||
tmat2x4<T> const & m);
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
tmat2x4<T> const operator- (
|
||||
tmat2x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> const operator-- (
|
||||
tmat2x4<T> const & m,
|
||||
int);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> const operator++ (
|
||||
tmat2x4<T> const & m,
|
||||
int);
|
||||
|
||||
} //namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
|
||||
namespace precision
|
||||
{
|
||||
//! 2 columns of 4 components matrix of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
typedef detail::tmat2x4<lowp_float> lowp_mat2x4;
|
||||
//! 2 columns of 4 components matrix of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
typedef detail::tmat2x4<mediump_float> mediump_mat2x4;
|
||||
//! 2 columns of 4 components matrix of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
typedef detail::tmat2x4<highp_float> highp_mat2x4;
|
||||
}
|
||||
//namespace precision
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
} //namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_mat2x4.inl"
|
||||
#endif
|
||||
|
||||
#endif //glm_core_type_mat2x4
|
||||
@@ -1,569 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-08-05
|
||||
// Updated : 2010-02-03
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat2x4.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
inline typename tmat2x4<T>::size_type tmat2x4<T>::col_size()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat2x4<T>::size_type tmat2x4<T>::row_size()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat2x4<T>::col_type &
|
||||
tmat2x4<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
)
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat2x4<T>::col_type const &
|
||||
tmat2x4<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
) const
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Constructors
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>::tmat2x4()
|
||||
{
|
||||
value_type const Zero(0);
|
||||
value_type const One(1);
|
||||
this->value[0] = col_type(One, Zero, Zero, Zero);
|
||||
this->value[1] = col_type(Zero, One, Zero, Zero);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m.value[0];
|
||||
this->value[1] = m.value[1];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>::tmat2x4
|
||||
(
|
||||
ctor
|
||||
)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>::tmat2x4
|
||||
(
|
||||
value_type const & s
|
||||
)
|
||||
{
|
||||
value_type const Zero(0);
|
||||
this->value[0] = col_type(s, Zero, Zero, Zero);
|
||||
this->value[1] = col_type(Zero, Zero, Zero, Zero);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>::tmat2x4
|
||||
(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(x0, y0, z0, w0);
|
||||
this->value[1] = col_type(x1, y1, z1, w1);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>::tmat2x4
|
||||
(
|
||||
col_type const & v0,
|
||||
col_type const & v1
|
||||
)
|
||||
{
|
||||
this->value[0] = v0;
|
||||
this->value[1] = v1;
|
||||
}
|
||||
|
||||
// Conversion
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat2x4<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], detail::tvec2<T>(0));
|
||||
this->value[1] = col_type(m[1], detail::tvec2<T>(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], detail::tvec2<T>(0));
|
||||
this->value[1] = col_type(m[1], detail::tvec2<T>(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], detail::tvec2<T>(T(0)));
|
||||
this->value[1] = col_type(m[1], detail::tvec2<T>(T(0)));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Unary updatable operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>& tmat2x4<T>::operator=
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x4<T>& tmat2x4<T>::operator=
|
||||
(
|
||||
tmat2x4<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x4<T>& tmat2x4<T>::operator+=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] += s;
|
||||
this->value[1] += s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x4<T>& tmat2x4<T>::operator+=
|
||||
(
|
||||
tmat2x4<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] += m[0];
|
||||
this->value[1] += m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x4<T>& tmat2x4<T>::operator-=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] -= s;
|
||||
this->value[1] -= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x4<T>& tmat2x4<T>::operator-=
|
||||
(
|
||||
tmat2x4<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] -= m[0];
|
||||
this->value[1] -= m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x4<T>& tmat2x4<T>::operator*=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] *= s;
|
||||
this->value[1] *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x4<T>& tmat2x4<T>::operator*=
|
||||
(
|
||||
tmat2x4<U> const & m
|
||||
)
|
||||
{
|
||||
return (*this = tmat2x4<T>(*this * m));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat2x4<T> & tmat2x4<T>::operator/=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] /= s;
|
||||
this->value[1] /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>& tmat2x4<T>::operator++ ()
|
||||
{
|
||||
++this->value[0];
|
||||
++this->value[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T>& tmat2x4<T>::operator-- ()
|
||||
{
|
||||
--this->value[0];
|
||||
--this->value[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Binary operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T> operator+
|
||||
(
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m[0] + s,
|
||||
m[1] + s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T> operator+
|
||||
(
|
||||
tmat2x4<T> const & m1,
|
||||
tmat2x4<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m1[0] + m2[0],
|
||||
m1[1] + m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T> operator-
|
||||
(
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m[0] - s,
|
||||
m[1] - s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T> operator-
|
||||
(
|
||||
tmat2x4<T> const & m1,
|
||||
tmat2x4<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m1[0] - m2[0],
|
||||
m1[1] - m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T> operator*
|
||||
(
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m[0] * s,
|
||||
m[1] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T> operator*
|
||||
(
|
||||
typename tmat2x4<T>::value_type const & s,
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m[0] * s,
|
||||
m[1] * s);
|
||||
}
|
||||
|
||||
// X
|
||||
// X
|
||||
// X X
|
||||
// X X
|
||||
// X X
|
||||
// X X
|
||||
template <typename T>
|
||||
inline typename tmat2x4<T>::col_type operator*
|
||||
(
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::row_type const & v
|
||||
)
|
||||
{
|
||||
return typename tmat2x4<T>::col_type(
|
||||
m[0][0] * v.x + m[1][0] * v.y,
|
||||
m[0][1] * v.x + m[1][1] * v.y,
|
||||
m[0][2] * v.x + m[1][2] * v.y,
|
||||
m[0][3] * v.x + m[1][3] * v.y);
|
||||
}
|
||||
|
||||
// X X
|
||||
// X X
|
||||
// X X
|
||||
// X X
|
||||
// X X X X
|
||||
template <typename T>
|
||||
inline typename tmat2x4<T>::row_type operator*
|
||||
(
|
||||
typename tmat2x4<T>::col_type const & v,
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
return typename tmat2x4<T>::row_type(
|
||||
v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3],
|
||||
v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x4<T> operator*
|
||||
(
|
||||
tmat2x4<T> const & m1,
|
||||
tmat4x2<T> const & m2
|
||||
)
|
||||
{
|
||||
typename tmat2x4<T>::value_type SrcA00 = m1[0][0];
|
||||
typename tmat2x4<T>::value_type SrcA01 = m1[0][1];
|
||||
typename tmat2x4<T>::value_type SrcA02 = m1[0][2];
|
||||
typename tmat2x4<T>::value_type SrcA03 = m1[0][3];
|
||||
typename tmat2x4<T>::value_type SrcA10 = m1[1][0];
|
||||
typename tmat2x4<T>::value_type SrcA11 = m1[1][1];
|
||||
typename tmat2x4<T>::value_type SrcA12 = m1[1][2];
|
||||
typename tmat2x4<T>::value_type SrcA13 = m1[1][3];
|
||||
|
||||
typename tmat2x4<T>::value_type SrcB00 = m2[0][0];
|
||||
typename tmat2x4<T>::value_type SrcB01 = m2[0][1];
|
||||
typename tmat2x4<T>::value_type SrcB10 = m2[1][0];
|
||||
typename tmat2x4<T>::value_type SrcB11 = m2[1][1];
|
||||
typename tmat2x4<T>::value_type SrcB20 = m2[2][0];
|
||||
typename tmat2x4<T>::value_type SrcB21 = m2[2][1];
|
||||
typename tmat2x4<T>::value_type SrcB30 = m2[3][0];
|
||||
typename tmat2x4<T>::value_type SrcB31 = m2[3][1];
|
||||
|
||||
tmat4x4<T> Result(tmat4x4<T>::null);
|
||||
Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01;
|
||||
Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01;
|
||||
Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01;
|
||||
Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01;
|
||||
Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11;
|
||||
Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11;
|
||||
Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11;
|
||||
Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11;
|
||||
Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21;
|
||||
Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21;
|
||||
Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21;
|
||||
Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21;
|
||||
Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31;
|
||||
Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31;
|
||||
Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31;
|
||||
Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T> operator/
|
||||
(
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m[0] / s,
|
||||
m[1] / s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T> operator/
|
||||
(
|
||||
typename tmat2x4<T>::value_type const & s,
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
s / m[0],
|
||||
s / m[1]);
|
||||
}
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
inline tmat2x4<T> const operator-
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
-m[0],
|
||||
-m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T> const operator++
|
||||
(
|
||||
tmat2x4<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m[0] + typename tmat2x4<T>::value_type(1),
|
||||
m[1] + typename tmat2x4<T>::value_type(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x4<T> const operator--
|
||||
(
|
||||
tmat2x4<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m[0] - typename tmat2x4<T>::value_type(1),
|
||||
m[1] - typename tmat2x4<T>::value_type(1));
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Boolean operators
|
||||
|
||||
template <typename T>
|
||||
inline bool operator==
|
||||
(
|
||||
tmat2x4<T> const & m1,
|
||||
tmat2x4<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] == m2[0]) && (m1[1] == m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline bool operator!=
|
||||
(
|
||||
tmat2x4<T> const & m1,
|
||||
tmat2x4<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] != m2[0]) || (m1[1] != m2[1]);
|
||||
}
|
||||
|
||||
} //namespace detail
|
||||
} //namespace glm
|
||||
@@ -1,217 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-08-05
|
||||
// Updated : 2010-02-05
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat3x2.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_mat3x2
|
||||
#define glm_core_type_mat3x2
|
||||
|
||||
#include "type_mat.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
void main_mat3x2();
|
||||
}//namespace test
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
template <typename T> struct tmat2x2;
|
||||
template <typename T> struct tmat2x3;
|
||||
template <typename T> struct tmat2x4;
|
||||
template <typename T> struct tmat3x2;
|
||||
template <typename T> struct tmat3x3;
|
||||
template <typename T> struct tmat3x4;
|
||||
template <typename T> struct tmat4x2;
|
||||
template <typename T> struct tmat4x3;
|
||||
template <typename T> struct tmat4x4;
|
||||
|
||||
//! \brief Template for 3 columns and 2 rows matrix of floating-point numbers.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tmat3x2
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec2<T> col_type;
|
||||
typedef tvec3<T> row_type;
|
||||
static size_type col_size();
|
||||
static size_type row_size();
|
||||
|
||||
typedef tmat3x2<T> type;
|
||||
typedef tmat2x3<T> transpose_type;
|
||||
|
||||
private:
|
||||
// Data
|
||||
col_type value[3];
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
tmat3x2();
|
||||
tmat3x2(tmat3x2 const & m);
|
||||
|
||||
explicit tmat3x2(
|
||||
ctor);
|
||||
explicit tmat3x2(
|
||||
value_type const & s);
|
||||
explicit tmat3x2(
|
||||
value_type const & x0, value_type const & y0,
|
||||
value_type const & x1, value_type const & y1,
|
||||
value_type const & x2, value_type const & y2);
|
||||
explicit tmat3x2(
|
||||
col_type const & v0,
|
||||
col_type const & v1,
|
||||
col_type const & v2);
|
||||
|
||||
// Conversion
|
||||
template <typename U>
|
||||
explicit tmat3x2(tmat3x2<U> const & m);
|
||||
|
||||
explicit tmat3x2(tmat2x2<T> const & x);
|
||||
explicit tmat3x2(tmat3x3<T> const & x);
|
||||
explicit tmat3x2(tmat4x4<T> const & x);
|
||||
explicit tmat3x2(tmat2x3<T> const & x);
|
||||
explicit tmat3x2(tmat2x4<T> const & x);
|
||||
explicit tmat3x2(tmat3x4<T> const & x);
|
||||
explicit tmat3x2(tmat4x2<T> const & x);
|
||||
explicit tmat3x2(tmat4x3<T> const & x);
|
||||
|
||||
// Accesses
|
||||
col_type & operator[](size_type i);
|
||||
col_type const & operator[](size_type i) const;
|
||||
|
||||
// Unary updatable operators
|
||||
tmat3x2<T> & operator= (tmat3x2<T> const & m);
|
||||
template <typename U>
|
||||
tmat3x2<T> & operator= (tmat3x2<U> const & m);
|
||||
template <typename U>
|
||||
tmat3x2<T> & operator+= (U const & s);
|
||||
template <typename U>
|
||||
tmat3x2<T> & operator+= (tmat3x2<U> const & m);
|
||||
template <typename U>
|
||||
tmat3x2<T> & operator-= (U const & s);
|
||||
template <typename U>
|
||||
tmat3x2<T> & operator-= (tmat3x2<U> const & m);
|
||||
template <typename U>
|
||||
tmat3x2<T> & operator*= (U const & s);
|
||||
template <typename U>
|
||||
tmat3x2<T> & operator*= (tmat3x2<U> const & m);
|
||||
template <typename U>
|
||||
tmat3x2<T> & operator/= (U const & s);
|
||||
|
||||
tmat3x2<T> & operator++ ();
|
||||
tmat3x2<T> & operator-- ();
|
||||
};
|
||||
|
||||
// Binary operators
|
||||
template <typename T>
|
||||
tmat3x2<T> operator+ (
|
||||
tmat3x2<T> const & m,
|
||||
typename tmat3x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat3x2<T> operator+ (
|
||||
tmat3x2<T> const & m1,
|
||||
tmat3x2<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat3x2<T> operator- (
|
||||
tmat3x2<T> const & m,
|
||||
typename tmat3x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat3x2<T> operator- (
|
||||
tmat3x2<T> const & m1,
|
||||
tmat3x2<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat3x2<T> operator* (
|
||||
tmat3x2<T> const & m,
|
||||
typename tmat3x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat3x2<T> operator* (
|
||||
typename tmat3x2<T>::value_type const & s,
|
||||
tmat3x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat3x2<T>::col_type operator* (
|
||||
tmat3x2<T> const & m,
|
||||
typename tmat3x2<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat3x2<T>::row_type operator* (
|
||||
typename tmat3x2<T>::col_type const & v,
|
||||
tmat3x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator* (
|
||||
tmat3x2<T> const & m1,
|
||||
tmat2x3<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat3x2<T> operator/ (
|
||||
tmat3x2<T> const & m,
|
||||
typename tmat3x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat3x2<T> operator/ (
|
||||
typename tmat3x2<T>::value_type const & s,
|
||||
tmat3x2<T> const & m);
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
tmat3x2<T> const operator- (
|
||||
tmat3x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat3x2<T> const operator-- (
|
||||
tmat3x2<T> const & m,
|
||||
int);
|
||||
|
||||
template <typename T>
|
||||
tmat3x2<T> const operator++ (
|
||||
tmat3x2<T> const & m,
|
||||
int);
|
||||
|
||||
} //namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
|
||||
namespace precision
|
||||
{
|
||||
//! 3 columns of 2 components matrix of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
typedef detail::tmat3x2<lowp_float> lowp_mat3x2;
|
||||
//! 3 columns of 2 components matrix of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
typedef detail::tmat3x2<mediump_float> mediump_mat3x2;
|
||||
//! 3 columns of 2 components matrix of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
typedef detail::tmat3x2<highp_float> highp_mat3x2;
|
||||
}
|
||||
//namespace precision
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
} //namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_mat3x2.inl"
|
||||
#endif
|
||||
|
||||
#endif //glm_core_type_mat3x2
|
||||
@@ -1,575 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-08-05
|
||||
// Updated : 2010-01-05
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat3x2.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
inline typename tmat3x2<T>::size_type tmat3x2<T>::col_size()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x2<T>::size_type tmat3x2<T>::row_size()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x2<T>::col_type &
|
||||
tmat3x2<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
)
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x2<T>::col_type const &
|
||||
tmat3x2<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
) const
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Constructors
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>::tmat3x2()
|
||||
{
|
||||
this->value[0] = col_type(1, 0);
|
||||
this->value[1] = col_type(0, 1);
|
||||
this->value[2] = col_type(0, 0);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>::tmat3x2
|
||||
(
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m.value[0];
|
||||
this->value[1] = m.value[1];
|
||||
this->value[2] = m.value[2];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>::tmat3x2
|
||||
(
|
||||
ctor
|
||||
)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>::tmat3x2
|
||||
(
|
||||
value_type const & s
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(s, 0);
|
||||
this->value[1] = col_type(0, s);
|
||||
this->value[2] = col_type(0, 0);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>::tmat3x2
|
||||
(
|
||||
value_type const & x0, value_type const & y0,
|
||||
value_type const & x1, value_type const & y1,
|
||||
value_type const & x2, value_type const & y2
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(x0, y0);
|
||||
this->value[1] = col_type(x1, y1);
|
||||
this->value[2] = col_type(x2, y2);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>::tmat3x2
|
||||
(
|
||||
col_type const & v0,
|
||||
col_type const & v1,
|
||||
col_type const & v2
|
||||
)
|
||||
{
|
||||
this->value[0] = v0;
|
||||
this->value[1] = v1;
|
||||
this->value[2] = v2;
|
||||
}
|
||||
|
||||
// Conversion
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x2<T>::tmat3x2
|
||||
(
|
||||
tmat3x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>::tmat3x2
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
this->value[2] = col_type(T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>::tmat3x2
|
||||
(
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>::tmat3x2
|
||||
(
|
||||
tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>::tmat3x2
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>::tmat3x2
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>::tmat3x2
|
||||
(
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>::tmat3x2
|
||||
(
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
this->value[2] = m[2];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>::tmat3x2
|
||||
(
|
||||
tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Unary updatable operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>& tmat3x2<T>::operator=
|
||||
(
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
this->value[2] = m[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x2<T>& tmat3x2<T>::operator=
|
||||
(
|
||||
tmat3x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
this->value[2] = m[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x2<T>& tmat3x2<T>::operator+=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] += s;
|
||||
this->value[1] += s;
|
||||
this->value[2] += s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x2<T>& tmat3x2<T>::operator+=
|
||||
(
|
||||
tmat3x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] += m[0];
|
||||
this->value[1] += m[1];
|
||||
this->value[2] += m[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x2<T>& tmat3x2<T>::operator-=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] -= s;
|
||||
this->value[1] -= s;
|
||||
this->value[2] -= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x2<T>& tmat3x2<T>::operator-=
|
||||
(
|
||||
tmat3x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] -= m[0];
|
||||
this->value[1] -= m[1];
|
||||
this->value[2] -= m[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x2<T>& tmat3x2<T>::operator*=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] *= s;
|
||||
this->value[1] *= s;
|
||||
this->value[2] *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x2<T>& tmat3x2<T>::operator*=
|
||||
(
|
||||
tmat3x2<U> const & m
|
||||
)
|
||||
{
|
||||
return (*this = tmat3x2<T>(*this * m));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x2<T> & tmat3x2<T>::operator/=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] /= s;
|
||||
this->value[1] /= s;
|
||||
this->value[2] /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>& tmat3x2<T>::operator++ ()
|
||||
{
|
||||
++this->value[0];
|
||||
++this->value[1];
|
||||
++this->value[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T>& tmat3x2<T>::operator-- ()
|
||||
{
|
||||
--this->value[0];
|
||||
--this->value[1];
|
||||
--this->value[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Binary operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T> operator+
|
||||
(
|
||||
tmat3x2<T> const & m,
|
||||
typename tmat3x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat3x2<T>(
|
||||
m[0] + s,
|
||||
m[1] + s,
|
||||
m[2] + s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T> operator+
|
||||
(
|
||||
tmat3x2<T> const & m1,
|
||||
tmat3x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat3x2<T>(
|
||||
m1[0] + m2[0],
|
||||
m1[1] + m2[1],
|
||||
m1[2] + m2[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T> operator-
|
||||
(
|
||||
tmat3x2<T> const & m,
|
||||
typename tmat3x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat3x2<T>(
|
||||
m[0] - s,
|
||||
m[1] - s,
|
||||
m[2] - s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T> operator-
|
||||
(
|
||||
tmat3x2<T> const & m1,
|
||||
tmat3x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat3x2<T>(
|
||||
m1[0] - m2[0],
|
||||
m1[1] - m2[1],
|
||||
m1[2] - m2[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T> operator*
|
||||
(
|
||||
tmat3x2<T> const & m,
|
||||
typename tmat3x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat3x2<T>(
|
||||
m[0] * s,
|
||||
m[1] * s,
|
||||
m[2] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T> operator*
|
||||
(
|
||||
typename tmat3x2<T>::value_type const & s,
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat3x2<T>(
|
||||
m[0] * s,
|
||||
m[1] * s,
|
||||
m[2] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x2<T>::col_type operator*
|
||||
(
|
||||
tmat3x2<T> const & m,
|
||||
typename tmat3x2<T>::row_type const & v)
|
||||
{
|
||||
return typename tmat3x2<T>::col_type(
|
||||
m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,
|
||||
m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x2<T>::row_type operator*
|
||||
(
|
||||
typename tmat3x2<T>::col_type const & v,
|
||||
tmat3x2<T> const & m)
|
||||
{
|
||||
return typename tmat3x2<T>::row_type(
|
||||
v.x * m[0][0] + v.y * m[0][1],
|
||||
v.x * m[1][0] + v.y * m[1][1],
|
||||
v.x * m[2][0] + v.y * m[2][1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> operator*
|
||||
(
|
||||
tmat3x2<T> const & m1,
|
||||
tmat2x3<T> const & m2
|
||||
)
|
||||
{
|
||||
const T SrcA00 = m1[0][0];
|
||||
const T SrcA01 = m1[0][1];
|
||||
const T SrcA10 = m1[1][0];
|
||||
const T SrcA11 = m1[1][1];
|
||||
const T SrcA20 = m1[2][0];
|
||||
const T SrcA21 = m1[2][1];
|
||||
|
||||
const T SrcB00 = m2[0][0];
|
||||
const T SrcB01 = m2[0][1];
|
||||
const T SrcB02 = m2[0][2];
|
||||
const T SrcB10 = m2[1][0];
|
||||
const T SrcB11 = m2[1][1];
|
||||
const T SrcB12 = m2[1][2];
|
||||
|
||||
tmat2x2<T> Result(tmat2x2<T>::null);
|
||||
Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;
|
||||
Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;
|
||||
Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;
|
||||
Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T> operator/
|
||||
(
|
||||
tmat3x2<T> const & m,
|
||||
typename tmat3x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat3x2<T>(
|
||||
m[0] / s,
|
||||
m[1] / s,
|
||||
m[2] / s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T> operator/
|
||||
(
|
||||
typename tmat3x2<T>::value_type const & s,
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat3x2<T>(
|
||||
s / m[0],
|
||||
s / m[1],
|
||||
s / m[2]);
|
||||
}
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
inline tmat3x2<T> const operator-
|
||||
(
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat3x2<T>(
|
||||
-m[0],
|
||||
-m[1],
|
||||
-m[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T> const operator++
|
||||
(
|
||||
tmat3x2<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
typename tmat3x2<T>::value_type One(1);
|
||||
return tmat3x2<T>(
|
||||
m[0] + One,
|
||||
m[1] + One,
|
||||
m[2] + One);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x2<T> const operator--
|
||||
(
|
||||
tmat3x2<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
typename tmat3x2<T>::value_type One(1);
|
||||
return tmat3x2<T>(
|
||||
m[0] - One,
|
||||
m[1] - One,
|
||||
m[2] - One);
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Boolean operators
|
||||
|
||||
template <typename T>
|
||||
inline bool operator==
|
||||
(
|
||||
tmat3x2<T> const & m1,
|
||||
tmat3x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline bool operator!=
|
||||
(
|
||||
tmat3x2<T> const & m1,
|
||||
tmat3x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);
|
||||
}
|
||||
|
||||
} //namespace detail
|
||||
} //namespace glm
|
||||
@@ -1,250 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2005-01-27
|
||||
// Updated : 2010-02-03
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat3x3.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_mat3x3
|
||||
#define glm_core_type_mat3x3
|
||||
|
||||
#include "type_mat.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
void main_mat3x3();
|
||||
}//namespace test
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
template <typename T> struct tmat2x2;
|
||||
template <typename T> struct tmat2x3;
|
||||
template <typename T> struct tmat2x4;
|
||||
template <typename T> struct tmat3x2;
|
||||
template <typename T> struct tmat3x3;
|
||||
template <typename T> struct tmat3x4;
|
||||
template <typename T> struct tmat4x2;
|
||||
template <typename T> struct tmat4x3;
|
||||
template <typename T> struct tmat4x4;
|
||||
|
||||
//! \brief Template for 3 * 3 matrix of floating-point numbers.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tmat3x3
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec3<T> col_type;
|
||||
typedef tvec3<T> row_type;
|
||||
static size_type col_size();
|
||||
static size_type row_size();
|
||||
|
||||
typedef tmat3x3<T> type;
|
||||
typedef tmat3x3<T> transpose_type;
|
||||
|
||||
public:
|
||||
// Implementation detail
|
||||
tmat3x3<T> _inverse() const;
|
||||
|
||||
private:
|
||||
// Data
|
||||
col_type value[3];
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
tmat3x3();
|
||||
tmat3x3(tmat3x3 const & m);
|
||||
|
||||
explicit tmat3x3(
|
||||
ctor Null);
|
||||
explicit tmat3x3(
|
||||
value_type const & s);
|
||||
explicit tmat3x3(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1,
|
||||
value_type const & x2, value_type const & y2, value_type const & z2);
|
||||
explicit tmat3x3(
|
||||
col_type const & v0,
|
||||
col_type const & v1,
|
||||
col_type const & v2);
|
||||
|
||||
// Conversions
|
||||
template <typename U>
|
||||
explicit tmat3x3(tmat3x3<U> const & m);
|
||||
|
||||
explicit tmat3x3(tmat2x2<T> const & x);
|
||||
explicit tmat3x3(tmat4x4<T> const & x);
|
||||
explicit tmat3x3(tmat2x3<T> const & x);
|
||||
explicit tmat3x3(tmat3x2<T> const & x);
|
||||
explicit tmat3x3(tmat2x4<T> const & x);
|
||||
explicit tmat3x3(tmat4x2<T> const & x);
|
||||
explicit tmat3x3(tmat3x4<T> const & x);
|
||||
explicit tmat3x3(tmat4x3<T> const & x);
|
||||
|
||||
// Accesses
|
||||
col_type & operator[](size_type i);
|
||||
col_type const & operator[](size_type i) const;
|
||||
|
||||
// Unary updatable operators
|
||||
tmat3x3<T>& operator= (tmat3x3<T> const & m);
|
||||
template <typename U>
|
||||
tmat3x3<T>& operator= (tmat3x3<U> const & m);
|
||||
template <typename U>
|
||||
tmat3x3<T>& operator+= (U const & s);
|
||||
template <typename U>
|
||||
tmat3x3<T>& operator+= (tmat3x3<U> const & m);
|
||||
template <typename U>
|
||||
tmat3x3<T>& operator-= (U const & s);
|
||||
template <typename U>
|
||||
tmat3x3<T>& operator-= (tmat3x3<U> const & m);
|
||||
template <typename U>
|
||||
tmat3x3<T>& operator*= (U const & s);
|
||||
template <typename U>
|
||||
tmat3x3<T>& operator*= (tmat3x3<U> const & m);
|
||||
template <typename U>
|
||||
tmat3x3<T>& operator/= (U const & s);
|
||||
template <typename U>
|
||||
tmat3x3<T>& operator/= (tmat3x3<U> const & m);
|
||||
tmat3x3<T>& operator++ ();
|
||||
tmat3x3<T>& operator-- ();
|
||||
};
|
||||
|
||||
// Binary operators
|
||||
template <typename T>
|
||||
tmat3x3<T> operator+ (
|
||||
tmat3x3<T> const & m,
|
||||
typename tmat3x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> operator+ (
|
||||
typename tmat3x3<T>::value_type const & s,
|
||||
tmat3x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> operator+ (
|
||||
tmat3x3<T> const & m1,
|
||||
tmat3x3<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> operator- (
|
||||
tmat3x3<T> const & m,
|
||||
typename tmat3x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> operator- (
|
||||
typename tmat3x3<T>::value_type const & s,
|
||||
tmat3x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> operator- (
|
||||
tmat3x3<T> const & m1,
|
||||
tmat3x3<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> operator* (
|
||||
tmat3x3<T> const & m,
|
||||
typename tmat3x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> operator* (
|
||||
typename tmat3x3<T>::value_type const & s,
|
||||
tmat3x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat3x3<T>::col_type operator* (
|
||||
tmat3x3<T> const & m,
|
||||
typename tmat3x3<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat3x3<T>::row_type operator* (
|
||||
typename tmat3x3<T>::col_type const & v,
|
||||
tmat3x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> operator* (
|
||||
tmat3x3<T> const & m1,
|
||||
tmat3x3<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> operator/ (
|
||||
tmat3x3<T> const & m,
|
||||
typename tmat3x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> operator/ (
|
||||
typename tmat3x3<T>::value_type const & s,
|
||||
tmat3x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat3x3<T>::col_type operator/ (
|
||||
tmat3x3<T> const & m,
|
||||
typename tmat3x3<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat3x3<T>::row_type operator/ (
|
||||
typename tmat3x3<T>::col_type const & v,
|
||||
tmat3x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> operator/ (
|
||||
tmat3x3<T> const & m1,
|
||||
tmat3x3<T> const & m2);
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
tmat3x3<T> const operator- (
|
||||
tmat3x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> const operator-- (
|
||||
tmat3x3<T> const & m,
|
||||
int);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> const operator++ (
|
||||
tmat3x3<T> const & m,
|
||||
int);
|
||||
|
||||
} //namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
|
||||
namespace precision
|
||||
{
|
||||
//! 3 columns of 3 components matrix of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat3x3<lowp_float> lowp_mat3x3;
|
||||
//! 3 columns of 3 components matrix of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat3x3<mediump_float> mediump_mat3x3;
|
||||
//! 3 columns of 3 components matrix of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat3x3<highp_float> highp_mat3x3;
|
||||
}
|
||||
//namespace precision
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
} //namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_mat3x3.inl"
|
||||
#endif
|
||||
|
||||
#endif //glm_core_type_mat3x3
|
||||
@@ -1,704 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2005-01-27
|
||||
// Updated : 2010-02-03
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat3x3.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
inline typename tmat3x3<T>::size_type tmat3x3<T>::col_size()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x3<T>::size_type tmat3x3<T>::row_size()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x3<T>::col_type &
|
||||
tmat3x3<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
)
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x3<T>::col_type const &
|
||||
tmat3x3<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
) const
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Constructors
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T>::tmat3x3()
|
||||
{
|
||||
value_type const Zero(0);
|
||||
value_type const One(1);
|
||||
this->value[0] = col_type(One, Zero, Zero);
|
||||
this->value[1] = col_type(Zero, One, Zero);
|
||||
this->value[2] = col_type(Zero, Zero, One);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T>::tmat3x3
|
||||
(
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m.value[0];
|
||||
this->value[1] = m.value[1];
|
||||
this->value[2] = m.value[2];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T>::tmat3x3
|
||||
(
|
||||
ctor
|
||||
)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T>::tmat3x3
|
||||
(
|
||||
value_type const & s
|
||||
)
|
||||
{
|
||||
value_type const Zero(0);
|
||||
this->value[0] = col_type(s, Zero, Zero);
|
||||
this->value[1] = col_type(Zero, s, Zero);
|
||||
this->value[2] = col_type(Zero, Zero, s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T>::tmat3x3
|
||||
(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1,
|
||||
value_type const & x2, value_type const & y2, value_type const & z2
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(x0, y0, z0);
|
||||
this->value[1] = col_type(x1, y1, z1);
|
||||
this->value[2] = col_type(x2, y2, z2);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T>::tmat3x3
|
||||
(
|
||||
col_type const & v0,
|
||||
col_type const & v1,
|
||||
col_type const & v2
|
||||
)
|
||||
{
|
||||
this->value[0] = v0;
|
||||
this->value[1] = v1;
|
||||
this->value[2] = v2;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Conversions
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x3<T>::tmat3x3
|
||||
(
|
||||
tmat3x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T>::tmat3x3
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], value_type(0));
|
||||
this->value[1] = col_type(m[1], value_type(0));
|
||||
this->value[2] = col_type(detail::tvec2<T>(0), value_type(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T>::tmat3x3
|
||||
(
|
||||
tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T>::tmat3x3
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
this->value[2] = col_type(detail::tvec2<T>(0), value_type(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T>::tmat3x3
|
||||
(
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], value_type(0));
|
||||
this->value[1] = col_type(m[1], value_type(0));
|
||||
this->value[2] = col_type(m[2], value_type(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T>::tmat3x3
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(detail::tvec2<T>(0), value_type(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T>::tmat3x3
|
||||
(
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], value_type(0));
|
||||
this->value[1] = col_type(m[1], value_type(0));
|
||||
this->value[2] = col_type(m[2], value_type(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T>::tmat3x3
|
||||
(
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T>::tmat3x3
|
||||
(
|
||||
tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
this->value[2] = m[2];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> & tmat3x3<T>::operator=
|
||||
(
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
this->value[2] = m[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x3<T> & tmat3x3<T>::operator=
|
||||
(
|
||||
tmat3x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
this->value[2] = m[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x3<T> & tmat3x3<T>::operator+=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] += s;
|
||||
this->value[1] += s;
|
||||
this->value[2] += s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x3<T> & tmat3x3<T>::operator+=
|
||||
(
|
||||
tmat3x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] += m[0];
|
||||
this->value[1] += m[1];
|
||||
this->value[2] += m[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x3<T> & tmat3x3<T>::operator-=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] -= s;
|
||||
this->value[1] -= s;
|
||||
this->value[2] -= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x3<T> & tmat3x3<T>::operator-=
|
||||
(
|
||||
tmat3x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] -= m[0];
|
||||
this->value[1] -= m[1];
|
||||
this->value[2] -= m[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x3<T> & tmat3x3<T>::operator*=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] *= s;
|
||||
this->value[1] *= s;
|
||||
this->value[2] *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x3<T> & tmat3x3<T>::operator*=
|
||||
(
|
||||
tmat3x3<U> const & m
|
||||
)
|
||||
{
|
||||
return (*this = *this * m);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x3<T> & tmat3x3<T>::operator/=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] /= s;
|
||||
this->value[1] /= s;
|
||||
this->value[2] /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x3<T> & tmat3x3<T>::operator/=
|
||||
(
|
||||
tmat3x3<U> const & m
|
||||
)
|
||||
{
|
||||
return (*this = *this / m);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> & tmat3x3<T>::operator++ ()
|
||||
{
|
||||
++this->value[0];
|
||||
++this->value[1];
|
||||
++this->value[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> & tmat3x3<T>::operator-- ()
|
||||
{
|
||||
--this->value[0];
|
||||
--this->value[1];
|
||||
--this->value[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> tmat3x3<T>::_inverse() const
|
||||
{
|
||||
T S00 = value[0][0];
|
||||
T S01 = value[0][1];
|
||||
T S02 = value[0][2];
|
||||
|
||||
T S10 = value[1][0];
|
||||
T S11 = value[1][1];
|
||||
T S12 = value[1][2];
|
||||
|
||||
T S20 = value[2][0];
|
||||
T S21 = value[2][1];
|
||||
T S22 = value[2][2];
|
||||
/*
|
||||
tmat3x3<T> Inverse(
|
||||
+ (S11 * S22 - S21 * S12),
|
||||
- (S10 * S22 - S20 * S12),
|
||||
+ (S10 * S21 - S20 * S11),
|
||||
- (S01 * S22 - S21 * S02),
|
||||
+ (S00 * S22 - S20 * S02),
|
||||
- (S00 * S21 - S20 * S01),
|
||||
+ (S01 * S12 - S11 * S02),
|
||||
- (S00 * S12 - S10 * S02),
|
||||
+ (S00 * S11 - S10 * S01));
|
||||
*/
|
||||
tmat3x3<T> Inverse(
|
||||
S11 * S22 - S21 * S12,
|
||||
S12 * S20 - S22 * S10,
|
||||
S10 * S21 - S20 * S11,
|
||||
S02 * S21 - S01 * S22,
|
||||
S00 * S22 - S02 * S20,
|
||||
S01 * S20 - S00 * S21,
|
||||
S12 * S01 - S11 * S02,
|
||||
S10 * S02 - S12 * S00,
|
||||
S11 * S00 - S10 * S01);
|
||||
|
||||
T Determinant = S00 * (S11 * S22 - S21 * S12)
|
||||
- S10 * (S01 * S22 - S21 * S02)
|
||||
+ S20 * (S01 * S12 - S11 * S02);
|
||||
|
||||
Inverse /= Determinant;
|
||||
return Inverse;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Binary operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> operator+
|
||||
(
|
||||
tmat3x3<T> const & m,
|
||||
typename tmat3x3<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat3x3<T>(
|
||||
m[0] + s,
|
||||
m[1] + s,
|
||||
m[2] + s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> operator+
|
||||
(
|
||||
typename tmat3x3<T>::value_type const & s,
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat3x3<T>(
|
||||
m[0] + s,
|
||||
m[1] + s,
|
||||
m[2] + s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> operator+
|
||||
(
|
||||
tmat3x3<T> const & m1,
|
||||
tmat3x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat3x3<T>(
|
||||
m1[0] + m2[0],
|
||||
m1[1] + m2[1],
|
||||
m1[2] + m2[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> operator-
|
||||
(
|
||||
tmat3x3<T> const & m,
|
||||
typename tmat3x3<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat3x3<T>(
|
||||
m[0] - s,
|
||||
m[1] - s,
|
||||
m[2] - s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> operator-
|
||||
(
|
||||
typename tmat3x3<T>::value_type const & s,
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat3x3<T>(
|
||||
s - m[0],
|
||||
s - m[1],
|
||||
s - m[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> operator-
|
||||
(
|
||||
tmat3x3<T> const & m1,
|
||||
tmat3x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat3x3<T>(
|
||||
m1[0] - m2[0],
|
||||
m1[1] - m2[1],
|
||||
m1[2] - m2[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> operator*
|
||||
(
|
||||
tmat3x3<T> const & m,
|
||||
typename tmat3x3<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat3x3<T>(
|
||||
m[0] * s,
|
||||
m[1] * s,
|
||||
m[2] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> operator*
|
||||
(
|
||||
typename tmat3x3<T>::value_type const & s,
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat3x3<T>(
|
||||
m[0] * s,
|
||||
m[1] * s,
|
||||
m[2] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x3<T>::col_type operator*
|
||||
(
|
||||
tmat3x3<T> const & m,
|
||||
typename tmat3x3<T>::row_type const & v
|
||||
)
|
||||
{
|
||||
return typename tmat3x3<T>::col_type(
|
||||
m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,
|
||||
m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z,
|
||||
m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x3<T>::row_type operator*
|
||||
(
|
||||
typename tmat3x3<T>::col_type const & v,
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
return typename tmat3x3<T>::row_type(
|
||||
m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z,
|
||||
m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z,
|
||||
m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> operator*
|
||||
(
|
||||
tmat3x3<T> const & m1,
|
||||
tmat3x3<T> const & m2
|
||||
)
|
||||
{
|
||||
typename tmat3x3<T>::value_type const SrcA00 = m1[0][0];
|
||||
typename tmat3x3<T>::value_type const SrcA01 = m1[0][1];
|
||||
typename tmat3x3<T>::value_type const SrcA02 = m1[0][2];
|
||||
typename tmat3x3<T>::value_type const SrcA10 = m1[1][0];
|
||||
typename tmat3x3<T>::value_type const SrcA11 = m1[1][1];
|
||||
typename tmat3x3<T>::value_type const SrcA12 = m1[1][2];
|
||||
typename tmat3x3<T>::value_type const SrcA20 = m1[2][0];
|
||||
typename tmat3x3<T>::value_type const SrcA21 = m1[2][1];
|
||||
typename tmat3x3<T>::value_type const SrcA22 = m1[2][2];
|
||||
|
||||
typename tmat3x3<T>::value_type const SrcB00 = m2[0][0];
|
||||
typename tmat3x3<T>::value_type const SrcB01 = m2[0][1];
|
||||
typename tmat3x3<T>::value_type const SrcB02 = m2[0][2];
|
||||
typename tmat3x3<T>::value_type const SrcB10 = m2[1][0];
|
||||
typename tmat3x3<T>::value_type const SrcB11 = m2[1][1];
|
||||
typename tmat3x3<T>::value_type const SrcB12 = m2[1][2];
|
||||
typename tmat3x3<T>::value_type const SrcB20 = m2[2][0];
|
||||
typename tmat3x3<T>::value_type const SrcB21 = m2[2][1];
|
||||
typename tmat3x3<T>::value_type const SrcB22 = m2[2][2];
|
||||
|
||||
tmat3x3<T> Result(tmat3x3<T>::null);
|
||||
Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;
|
||||
Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;
|
||||
Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02;
|
||||
Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;
|
||||
Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;
|
||||
Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12;
|
||||
Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22;
|
||||
Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22;
|
||||
Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22;
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> operator/
|
||||
(
|
||||
tmat3x3<T> const & m,
|
||||
typename tmat3x3<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat3x3<T>(
|
||||
m[0] / s,
|
||||
m[1] / s,
|
||||
m[2] / s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> operator/
|
||||
(
|
||||
typename tmat3x3<T>::value_type const & s,
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat3x3<T>(
|
||||
s / m[0],
|
||||
s / m[1],
|
||||
s / m[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x3<T>::col_type operator/
|
||||
(
|
||||
tmat3x3<T> const & m,
|
||||
typename tmat3x3<T>::row_type const & v
|
||||
)
|
||||
{
|
||||
return m._inverse() * v;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x3<T>::row_type operator/
|
||||
(
|
||||
typename tmat3x3<T>::col_type const & v,
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
return v * m._inverse();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> operator/
|
||||
(
|
||||
tmat3x3<T> const & m1,
|
||||
tmat3x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return m1 * m2._inverse();
|
||||
}
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
inline tmat3x3<T> const operator-
|
||||
(
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat3x3<T>(
|
||||
-m[0],
|
||||
-m[1],
|
||||
-m[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> const operator++
|
||||
(
|
||||
tmat3x3<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat3x3<T>(
|
||||
m[0] + T(1),
|
||||
m[1] + T(1),
|
||||
m[2] + T(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> const operator--
|
||||
(
|
||||
tmat3x3<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat3x3<T>(
|
||||
m[0] - T(1),
|
||||
m[1] - T(1),
|
||||
m[2] - T(1));
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Boolean operators
|
||||
|
||||
template <typename T>
|
||||
inline bool operator==
|
||||
(
|
||||
tmat3x3<T> const & m1,
|
||||
tmat3x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline bool operator!=
|
||||
(
|
||||
tmat3x3<T> const & m1,
|
||||
tmat3x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);
|
||||
}
|
||||
|
||||
} //namespace detail
|
||||
} //namespace glm
|
||||
@@ -1,217 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-08-05
|
||||
// Updated : 2010-02-05
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat3x4.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_mat3x4
|
||||
#define glm_core_type_mat3x4
|
||||
|
||||
#include "type_mat.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
void main_mat3x4();
|
||||
}//namespace test
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
template <typename T> struct tmat2x2;
|
||||
template <typename T> struct tmat2x3;
|
||||
template <typename T> struct tmat2x4;
|
||||
template <typename T> struct tmat3x2;
|
||||
template <typename T> struct tmat3x3;
|
||||
template <typename T> struct tmat3x4;
|
||||
template <typename T> struct tmat4x2;
|
||||
template <typename T> struct tmat4x3;
|
||||
template <typename T> struct tmat4x4;
|
||||
|
||||
//! \brief Template for 3 columns and 4 rows matrix of floating-point numbers.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tmat3x4
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec4<T> col_type;
|
||||
typedef tvec3<T> row_type;
|
||||
static size_type col_size();
|
||||
static size_type row_size();
|
||||
|
||||
typedef tmat3x4<T> type;
|
||||
typedef tmat4x3<T> transpose_type;
|
||||
|
||||
private:
|
||||
// Data
|
||||
col_type value[3];
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
tmat3x4();
|
||||
tmat3x4(tmat3x4 const & m);
|
||||
|
||||
explicit tmat3x4(
|
||||
ctor Null);
|
||||
explicit tmat3x4(
|
||||
value_type const & s);
|
||||
explicit tmat3x4(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1,
|
||||
value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2);
|
||||
explicit tmat3x4(
|
||||
col_type const & v0,
|
||||
col_type const & v1,
|
||||
col_type const & v2);
|
||||
|
||||
// Conversion
|
||||
template <typename U>
|
||||
explicit tmat3x4(tmat3x4<U> const & m);
|
||||
|
||||
explicit tmat3x4(tmat2x2<T> const & x);
|
||||
explicit tmat3x4(tmat3x3<T> const & x);
|
||||
explicit tmat3x4(tmat4x4<T> const & x);
|
||||
explicit tmat3x4(tmat2x3<T> const & x);
|
||||
explicit tmat3x4(tmat3x2<T> const & x);
|
||||
explicit tmat3x4(tmat2x4<T> const & x);
|
||||
explicit tmat3x4(tmat4x2<T> const & x);
|
||||
explicit tmat3x4(tmat4x3<T> const & x);
|
||||
|
||||
// Accesses
|
||||
col_type & operator[](size_type i);
|
||||
col_type const & operator[](size_type i) const;
|
||||
|
||||
// Unary updatable operators
|
||||
tmat3x4<T> & operator= (tmat3x4<T> const & m);
|
||||
template <typename U>
|
||||
tmat3x4<T> & operator= (tmat3x4<U> const & m);
|
||||
template <typename U>
|
||||
tmat3x4<T> & operator+= (U const & s);
|
||||
template <typename U>
|
||||
tmat3x4<T> & operator+= (tmat3x4<U> const & m);
|
||||
template <typename U>
|
||||
tmat3x4<T> & operator-= (U const & s);
|
||||
template <typename U>
|
||||
tmat3x4<T> & operator-= (tmat3x4<U> const & m);
|
||||
template <typename U>
|
||||
tmat3x4<T> & operator*= (U const & s);
|
||||
template <typename U>
|
||||
tmat3x4<T> & operator*= (tmat3x4<U> const & m);
|
||||
template <typename U>
|
||||
tmat3x4<T> & operator/= (U const & s);
|
||||
|
||||
tmat3x4<T> & operator++ ();
|
||||
tmat3x4<T> & operator-- ();
|
||||
};
|
||||
|
||||
// Binary operators
|
||||
template <typename T>
|
||||
tmat3x4<T> operator+ (
|
||||
tmat3x4<T> const & m,
|
||||
typename tmat3x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat3x4<T> operator+ (
|
||||
tmat3x4<T> const & m1,
|
||||
tmat3x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat3x4<T> operator- (
|
||||
tmat3x4<T> const & m,
|
||||
typename tmat3x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat3x4<T> operator- (
|
||||
tmat3x4<T> const & m1,
|
||||
tmat3x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat3x4<T> operator* (
|
||||
tmat3x4<T> const & m,
|
||||
typename tmat3x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat3x4<T> operator* (
|
||||
typename tmat3x4<T>::value_type const & s,
|
||||
tmat3x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat3x4<T>::col_type operator* (
|
||||
tmat3x4<T> const & m,
|
||||
typename tmat3x4<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat3x4<T>::row_type operator* (
|
||||
typename tmat3x4<T>::col_type const & v,
|
||||
tmat3x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat4x4<T> operator* (
|
||||
tmat3x4<T> const & m1,
|
||||
tmat4x3<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat3x4<T> operator/ (
|
||||
tmat3x4<T> const & m,
|
||||
typename tmat3x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat3x4<T> operator/ (
|
||||
typename tmat3x4<T>::value_type const & s,
|
||||
tmat3x4<T> const & m);
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
tmat3x4<T> const operator- (
|
||||
tmat3x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat3x4<T> const operator-- (
|
||||
tmat3x4<T> const & m,
|
||||
int);
|
||||
|
||||
template <typename T>
|
||||
tmat3x4<T> const operator++ (
|
||||
tmat3x4<T> const & m,
|
||||
int);
|
||||
|
||||
} //namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
|
||||
namespace precision
|
||||
{
|
||||
//! 3 columns of 4 components matrix of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
typedef detail::tmat3x4<lowp_float> lowp_mat3x4;
|
||||
//! 3 columns of 4 components matrix of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
typedef detail::tmat3x4<mediump_float> mediump_mat3x4;
|
||||
//! 3 columns of 4 components matrix of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
typedef detail::tmat3x4<highp_float> highp_mat3x4;
|
||||
}
|
||||
//namespace precision
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
} //namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_mat3x4.inl"
|
||||
#endif
|
||||
|
||||
#endif //glm_core_type_mat3x4
|
||||
@@ -1,609 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-08-05
|
||||
// Updated : 2010-02-05
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat3x4.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
inline typename tmat3x4<T>::size_type tmat3x4<T>::col_size()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x4<T>::size_type tmat3x4<T>::row_size()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x4<T>::col_type &
|
||||
tmat3x4<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
)
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x4<T>::col_type const &
|
||||
tmat3x4<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
) const
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Constructors
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>::tmat3x4()
|
||||
{
|
||||
value_type const Zero(0);
|
||||
value_type const One(1);
|
||||
this->value[0] = col_type(1, 0, 0, 0);
|
||||
this->value[1] = col_type(0, 1, 0, 0);
|
||||
this->value[2] = col_type(0, 0, 1, 0);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>::tmat3x4
|
||||
(
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m.value[0];
|
||||
this->value[1] = m.value[1];
|
||||
this->value[2] = m.value[2];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>::tmat3x4
|
||||
(
|
||||
ctor
|
||||
)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>::tmat3x4
|
||||
(
|
||||
value_type const & s
|
||||
)
|
||||
{
|
||||
value_type const Zero(0);
|
||||
this->value[0] = col_type(s, Zero, Zero, Zero);
|
||||
this->value[1] = col_type(Zero, s, Zero, Zero);
|
||||
this->value[2] = col_type(Zero, Zero, s, Zero);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>::tmat3x4
|
||||
(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1,
|
||||
value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(x0, y0, z0, w0);
|
||||
this->value[1] = col_type(x1, y1, z1, w1);
|
||||
this->value[2] = col_type(x2, y2, z2, w2);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>::tmat3x4
|
||||
(
|
||||
col_type const & v0,
|
||||
col_type const & v1,
|
||||
col_type const & v2
|
||||
)
|
||||
{
|
||||
this->value[0] = v0;
|
||||
this->value[1] = v1;
|
||||
this->value[2] = v2;
|
||||
}
|
||||
|
||||
// Conversion
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x4<T>::tmat3x4
|
||||
(
|
||||
tmat3x4<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>::tmat3x4
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], detail::tvec2<T>(0));
|
||||
this->value[1] = col_type(m[1], detail::tvec2<T>(0));
|
||||
this->value[2] = col_type(T(0), T(0), T(1), T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>::tmat3x4
|
||||
(
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
this->value[2] = col_type(m[2], T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>::tmat3x4
|
||||
(
|
||||
tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>::tmat3x4
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
this->value[2] = col_type(T(0), T(0), T(1), T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>::tmat3x4
|
||||
(
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], detail::tvec2<T>(0));
|
||||
this->value[1] = col_type(m[1], detail::tvec2<T>(0));
|
||||
this->value[2] = col_type(m[2], T(0), T(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>::tmat3x4
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(T(0), T(0), T(1), T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>::tmat3x4
|
||||
(
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], detail::tvec2<T>(T(0)));
|
||||
this->value[1] = col_type(m[1], detail::tvec2<T>(T(0)));
|
||||
this->value[2] = col_type(m[2], detail::tvec2<T>(T(1), T(0)));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>::tmat3x4
|
||||
(
|
||||
tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
this->value[2] = col_type(m[2], T(0));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Unary updatable operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>& tmat3x4<T>::operator=
|
||||
(
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
this->value[2] = m[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x4<T>& tmat3x4<T>::operator=
|
||||
(
|
||||
tmat3x4<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
this->value[2] = m[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x4<T>& tmat3x4<T>::operator+=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] += s;
|
||||
this->value[1] += s;
|
||||
this->value[2] += s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x4<T>& tmat3x4<T>::operator+=
|
||||
(
|
||||
tmat3x4<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] += m[0];
|
||||
this->value[1] += m[1];
|
||||
this->value[2] += m[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x4<T>& tmat3x4<T>::operator-=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] -= s;
|
||||
this->value[1] -= s;
|
||||
this->value[2] -= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x4<T>& tmat3x4<T>::operator-=
|
||||
(
|
||||
tmat3x4<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] -= m[0];
|
||||
this->value[1] -= m[1];
|
||||
this->value[2] -= m[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x4<T>& tmat3x4<T>::operator*=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] *= s;
|
||||
this->value[1] *= s;
|
||||
this->value[2] *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x4<T>& tmat3x4<T>::operator*=
|
||||
(
|
||||
tmat3x4<U> const & m
|
||||
)
|
||||
{
|
||||
return (*this = tmat3x4<T>(*this * m));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat3x4<T> & tmat3x4<T>::operator/=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] /= s;
|
||||
this->value[1] /= s;
|
||||
this->value[2] /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>& tmat3x4<T>::operator++ ()
|
||||
{
|
||||
++this->value[0];
|
||||
++this->value[1];
|
||||
++this->value[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T>& tmat3x4<T>::operator-- ()
|
||||
{
|
||||
--this->value[0];
|
||||
--this->value[1];
|
||||
--this->value[2];
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Binary operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T> operator+
|
||||
(
|
||||
tmat3x4<T> const & m,
|
||||
typename tmat3x4<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat3x4<T>(
|
||||
m[0] + s,
|
||||
m[1] + s,
|
||||
m[2] + s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T> operator+
|
||||
(
|
||||
tmat3x4<T> const & m1,
|
||||
tmat3x4<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat3x4<T>(
|
||||
m1[0] + m2[0],
|
||||
m1[1] + m2[1],
|
||||
m1[2] + m2[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T> operator-
|
||||
(
|
||||
tmat3x4<T> const & m,
|
||||
typename tmat3x4<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat3x4<T>(
|
||||
m[0] - s,
|
||||
m[1] - s,
|
||||
m[2] - s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T> operator-
|
||||
(
|
||||
tmat3x4<T> const & m1,
|
||||
tmat3x4<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat3x4<T>(
|
||||
m1[0] - m2[0],
|
||||
m1[1] - m2[1],
|
||||
m1[2] - m2[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T> operator*
|
||||
(
|
||||
tmat3x4<T> const & m,
|
||||
typename tmat3x4<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat3x4<T>(
|
||||
m[0] * s,
|
||||
m[1] * s,
|
||||
m[2] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T> operator*
|
||||
(
|
||||
typename tmat3x4<T>::value_type const & s,
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat3x4<T>(
|
||||
m[0] * s,
|
||||
m[1] * s,
|
||||
m[2] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat3x4<T>::col_type operator*
|
||||
(
|
||||
tmat3x4<T> const & m,
|
||||
typename tmat3x4<T>::row_type const & v
|
||||
)
|
||||
{
|
||||
return typename tmat3x4<T>::col_type(
|
||||
m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,
|
||||
m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z,
|
||||
m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z,
|
||||
m[0][3] * v.x + m[1][3] * v.y + m[2][3] * v.z);
|
||||
}
|
||||
|
||||
// X X X
|
||||
// X X X
|
||||
// X X X
|
||||
// X X X
|
||||
// X X X X
|
||||
template <typename T>
|
||||
inline typename tmat3x4<T>::row_type operator*
|
||||
(
|
||||
typename tmat3x4<T>::col_type const & v,
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
return typename tmat3x4<T>::row_type(
|
||||
v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3],
|
||||
v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3],
|
||||
v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2] + v.w * m[2][3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x4<T> operator*
|
||||
(
|
||||
tmat3x4<T> const & m1,
|
||||
tmat4x3<T> const & m2
|
||||
)
|
||||
{
|
||||
const T SrcA00 = m1[0][0];
|
||||
const T SrcA01 = m1[0][1];
|
||||
const T SrcA02 = m1[0][2];
|
||||
const T SrcA03 = m1[0][3];
|
||||
const T SrcA10 = m1[1][0];
|
||||
const T SrcA11 = m1[1][1];
|
||||
const T SrcA12 = m1[1][2];
|
||||
const T SrcA13 = m1[1][3];
|
||||
const T SrcA20 = m1[2][0];
|
||||
const T SrcA21 = m1[2][1];
|
||||
const T SrcA22 = m1[2][2];
|
||||
const T SrcA23 = m1[2][3];
|
||||
|
||||
const T SrcB00 = m2[0][0];
|
||||
const T SrcB01 = m2[0][1];
|
||||
const T SrcB02 = m2[0][2];
|
||||
const T SrcB10 = m2[1][0];
|
||||
const T SrcB11 = m2[1][1];
|
||||
const T SrcB12 = m2[1][2];
|
||||
const T SrcB20 = m2[2][0];
|
||||
const T SrcB21 = m2[2][1];
|
||||
const T SrcB22 = m2[2][2];
|
||||
const T SrcB30 = m2[3][0];
|
||||
const T SrcB31 = m2[3][1];
|
||||
const T SrcB32 = m2[3][2];
|
||||
|
||||
tmat4x4<T> Result(tmat4x4<T>::null);
|
||||
Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;
|
||||
Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;
|
||||
Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02;
|
||||
Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01 + SrcA23 * SrcB02;
|
||||
Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;
|
||||
Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;
|
||||
Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12;
|
||||
Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11 + SrcA23 * SrcB12;
|
||||
Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22;
|
||||
Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22;
|
||||
Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22;
|
||||
Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21 + SrcA23 * SrcB22;
|
||||
Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31 + SrcA20 * SrcB32;
|
||||
Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31 + SrcA21 * SrcB32;
|
||||
Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31 + SrcA22 * SrcB32;
|
||||
Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31 + SrcA23 * SrcB32;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T> operator/
|
||||
(
|
||||
tmat3x4<T> const & m,
|
||||
typename tmat3x4<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat3x4<T>(
|
||||
m[0] / s,
|
||||
m[1] / s,
|
||||
m[2] / s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T> operator/
|
||||
(
|
||||
typename tmat3x4<T>::value_type const & s,
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat3x4<T>(
|
||||
s / m[0],
|
||||
s / m[1],
|
||||
s / m[2]);
|
||||
}
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
inline tmat3x4<T> const operator-
|
||||
(
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat3x4<T>(
|
||||
-m[0],
|
||||
-m[1],
|
||||
-m[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T> const operator++
|
||||
(
|
||||
tmat3x4<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat3x4<T>(
|
||||
m[0] + T(1),
|
||||
m[1] + T(1),
|
||||
m[2] + T(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x4<T> const operator--
|
||||
(
|
||||
tmat3x4<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat3x4<T>(
|
||||
m[0] - T(1),
|
||||
m[1] - T(1),
|
||||
m[2] - T(1));
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Boolean operators
|
||||
|
||||
template <typename T>
|
||||
inline bool operator==
|
||||
(
|
||||
tmat3x4<T> const & m1,
|
||||
tmat3x4<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline bool operator!=
|
||||
(
|
||||
tmat3x4<T> const & m1,
|
||||
tmat3x4<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);
|
||||
}
|
||||
|
||||
} //namespace detail
|
||||
} //namespace glm
|
||||
@@ -1,222 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-10-01
|
||||
// Updated : 2010-02-11
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat4x2.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_mat4x2
|
||||
#define glm_core_type_mat4x2
|
||||
|
||||
#include "type_mat.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
void main_mat4x2();
|
||||
}//namespace test
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
template <typename T> struct tmat2x2;
|
||||
template <typename T> struct tmat2x3;
|
||||
template <typename T> struct tmat2x4;
|
||||
template <typename T> struct tmat3x2;
|
||||
template <typename T> struct tmat3x3;
|
||||
template <typename T> struct tmat3x4;
|
||||
template <typename T> struct tmat4x2;
|
||||
template <typename T> struct tmat4x3;
|
||||
template <typename T> struct tmat4x4;
|
||||
|
||||
//! \brief Template for 4 columns and 2 rows matrix of floating-point numbers.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tmat4x2
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec2<T> col_type;
|
||||
typedef tvec4<T> row_type;
|
||||
static size_type col_size();
|
||||
static size_type row_size();
|
||||
|
||||
typedef tmat4x2<T> type;
|
||||
typedef tmat2x4<T> transpose_type;
|
||||
|
||||
private:
|
||||
// Data
|
||||
col_type value[4];
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
tmat4x2();
|
||||
tmat4x2(tmat4x2 const & m);
|
||||
|
||||
explicit tmat4x2(
|
||||
ctor Null);
|
||||
explicit tmat4x2(
|
||||
value_type const & x);
|
||||
explicit tmat4x2(
|
||||
value_type const & x0, value_type const & y0,
|
||||
value_type const & x1, value_type const & y1,
|
||||
value_type const & x2, value_type const & y2,
|
||||
value_type const & x3, value_type const & y3);
|
||||
explicit tmat4x2(
|
||||
col_type const & v0,
|
||||
col_type const & v1,
|
||||
col_type const & v2,
|
||||
col_type const & v3);
|
||||
|
||||
// Conversions
|
||||
template <typename U>
|
||||
explicit tmat4x2(tmat4x2<U> const & m);
|
||||
|
||||
explicit tmat4x2(tmat2x2<T> const & x);
|
||||
explicit tmat4x2(tmat3x3<T> const & x);
|
||||
explicit tmat4x2(tmat4x4<T> const & x);
|
||||
explicit tmat4x2(tmat2x3<T> const & x);
|
||||
explicit tmat4x2(tmat3x2<T> const & x);
|
||||
explicit tmat4x2(tmat2x4<T> const & x);
|
||||
explicit tmat4x2(tmat4x3<T> const & x);
|
||||
explicit tmat4x2(tmat3x4<T> const & x);
|
||||
|
||||
// Accesses
|
||||
col_type & operator[](size_type i);
|
||||
col_type const & operator[](size_type i) const;
|
||||
|
||||
// Unary updatable operators
|
||||
tmat4x2<T>& operator= (tmat4x2<T> const & m);
|
||||
template <typename U>
|
||||
tmat4x2<T>& operator= (tmat4x2<U> const & m);
|
||||
template <typename U>
|
||||
tmat4x2<T>& operator+= (U const & s);
|
||||
template <typename U>
|
||||
tmat4x2<T>& operator+= (tmat4x2<U> const & m);
|
||||
template <typename U>
|
||||
tmat4x2<T>& operator-= (U const & s);
|
||||
template <typename U>
|
||||
tmat4x2<T>& operator-= (tmat4x2<U> const & m);
|
||||
template <typename U>
|
||||
tmat4x2<T>& operator*= (U const & s);
|
||||
template <typename U>
|
||||
tmat4x2<T>& operator*= (tmat4x2<U> const & m);
|
||||
template <typename U>
|
||||
tmat4x2<T>& operator/= (U const & s);
|
||||
|
||||
tmat4x2<T>& operator++ ();
|
||||
tmat4x2<T>& operator-- ();
|
||||
};
|
||||
|
||||
// Binary operators
|
||||
template <typename T>
|
||||
tmat4x2<T> operator+ (
|
||||
tmat4x2<T> const & m,
|
||||
typename tmat4x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat4x2<T> operator+ (
|
||||
tmat4x2<T> const & m1,
|
||||
tmat4x2<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat4x2<T> operator- (
|
||||
tmat4x2<T> const & m,
|
||||
typename tmat4x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat4x2<T> operator- (
|
||||
tmat4x2<T> const & m1,
|
||||
tmat4x2<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat4x2<T> operator* (
|
||||
tmat4x2<T> const & m,
|
||||
typename tmat4x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat4x2<T> operator* (
|
||||
typename tmat4x2<T>::value_type const & s,
|
||||
tmat4x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat4x2<T>::col_type operator* (
|
||||
tmat4x2<T> const & m,
|
||||
typename tmat4x2<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat4x2<T>::row_type operator* (
|
||||
typename tmat4x2<T>::col_type const & v,
|
||||
tmat4x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator* (
|
||||
tmat4x2<T> const & m1,
|
||||
tmat2x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat4x2<T> operator/ (
|
||||
tmat4x2<T> const & m,
|
||||
typename tmat4x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat4x2<T> operator/ (
|
||||
typename tmat4x2<T>::value_type const & s,
|
||||
tmat4x2<T> const & m);
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
tmat4x2<T> const operator- (
|
||||
tmat4x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat4x2<T> const operator-- (
|
||||
tmat4x2<T> const & m,
|
||||
int);
|
||||
|
||||
template <typename T>
|
||||
tmat4x2<T> const operator++ (
|
||||
tmat4x2<T> const & m,
|
||||
int);
|
||||
|
||||
} //namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
|
||||
namespace precision
|
||||
{
|
||||
//! 4 columns of 2 components matrix of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat4x2<lowp_float> lowp_mat4x2;
|
||||
//! 4 columns of 2 components matrix of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat4x2<mediump_float> mediump_mat4x2;
|
||||
//! 4 columns of 2 components matrix of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat4x2<highp_float> highp_mat4x2;
|
||||
}
|
||||
//namespace precision
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
} //namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_mat4x2.inl"
|
||||
#endif
|
||||
|
||||
#endif //glm_core_type_mat4x2
|
||||
@@ -1,618 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-10-01
|
||||
// Updated : 2010-02-03
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat4x2.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
inline typename tmat4x2<T>::size_type tmat4x2<T>::col_size()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat4x2<T>::size_type tmat4x2<T>::row_size()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat4x2<T>::col_type &
|
||||
tmat4x2<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
)
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat4x2<T>::col_type const &
|
||||
tmat4x2<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
) const
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Constructors
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>::tmat4x2()
|
||||
{
|
||||
value_type const Zero(0);
|
||||
value_type const One(1);
|
||||
this->value[0] = col_type(One, Zero);
|
||||
this->value[1] = col_type(Zero, One);
|
||||
this->value[2] = col_type(Zero, Zero);
|
||||
this->value[3] = col_type(Zero, Zero);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>::tmat4x2
|
||||
(
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m.value[0];
|
||||
this->value[1] = m.value[1];
|
||||
this->value[2] = m.value[2];
|
||||
this->value[3] = m.value[3];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>::tmat4x2
|
||||
(
|
||||
ctor
|
||||
)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>::tmat4x2
|
||||
(
|
||||
value_type const & s
|
||||
)
|
||||
{
|
||||
value_type const Zero(0);
|
||||
this->value[0] = col_type(s, Zero);
|
||||
this->value[1] = col_type(Zero, s);
|
||||
this->value[2] = col_type(Zero, Zero);
|
||||
this->value[3] = col_type(Zero, Zero);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>::tmat4x2
|
||||
(
|
||||
value_type const & x0, value_type const & y0,
|
||||
value_type const & x1, value_type const & y1,
|
||||
value_type const & x2, value_type const & y2,
|
||||
value_type const & x3, value_type const & y3
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(x0, y0);
|
||||
this->value[1] = col_type(x1, y1);
|
||||
this->value[2] = col_type(x2, y2);
|
||||
this->value[3] = col_type(x3, y3);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>::tmat4x2
|
||||
(
|
||||
col_type const & v0,
|
||||
col_type const & v1,
|
||||
col_type const & v2,
|
||||
col_type const & v3
|
||||
)
|
||||
{
|
||||
this->value[0] = v0;
|
||||
this->value[1] = v1;
|
||||
this->value[2] = v2;
|
||||
this->value[3] = v3;
|
||||
}
|
||||
|
||||
// Conversion
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x2<T>::tmat4x2
|
||||
(
|
||||
tmat4x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
this->value[3] = col_type(m[3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>::tmat4x2
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(value_type(0));
|
||||
this->value[3] = col_type(value_type(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>::tmat4x2
|
||||
(
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
this->value[3] = col_type(value_type(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>::tmat4x2
|
||||
(
|
||||
tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
this->value[3] = col_type(m[3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>::tmat4x2
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(value_type(0));
|
||||
this->value[3] = col_type(value_type(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>::tmat4x2
|
||||
(
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
this->value[3] = col_type(value_type(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>::tmat4x2
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(value_type(0));
|
||||
this->value[3] = col_type(value_type(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>::tmat4x2
|
||||
(
|
||||
tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
this->value[3] = col_type(m[3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>::tmat4x2
|
||||
(
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
this->value[3] = col_type(value_type(0));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Unary updatable operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T>& tmat4x2<T>::operator=
|
||||
(
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
this->value[2] = m[2];
|
||||
this->value[3] = m[3];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x2<T>& tmat4x2<T>::operator=
|
||||
(
|
||||
tmat4x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
this->value[2] = m[2];
|
||||
this->value[3] = m[3];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x2<T> & tmat4x2<T>::operator+=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] += s;
|
||||
this->value[1] += s;
|
||||
this->value[2] += s;
|
||||
this->value[3] += s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x2<T> & tmat4x2<T>::operator+=
|
||||
(
|
||||
tmat4x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] += m[0];
|
||||
this->value[1] += m[1];
|
||||
this->value[2] += m[2];
|
||||
this->value[3] += m[3];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x2<T> & tmat4x2<T>::operator-=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] -= s;
|
||||
this->value[1] -= s;
|
||||
this->value[2] -= s;
|
||||
this->value[3] -= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x2<T> & tmat4x2<T>::operator-=
|
||||
(
|
||||
tmat4x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] -= m[0];
|
||||
this->value[1] -= m[1];
|
||||
this->value[2] -= m[2];
|
||||
this->value[3] -= m[3];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x2<T> & tmat4x2<T>::operator*=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] *= s;
|
||||
this->value[1] *= s;
|
||||
this->value[2] *= s;
|
||||
this->value[3] *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x2<T> & tmat4x2<T>::operator*=
|
||||
(
|
||||
tmat4x2<U> const & m
|
||||
)
|
||||
{
|
||||
return (*this = tmat4x2<T>(*this * m));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x2<T> & tmat4x2<T>::operator/=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] /= s;
|
||||
this->value[1] /= s;
|
||||
this->value[2] /= s;
|
||||
this->value[3] /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T> & tmat4x2<T>::operator++ ()
|
||||
{
|
||||
++this->value[0];
|
||||
++this->value[1];
|
||||
++this->value[2];
|
||||
++this->value[3];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T> & tmat4x2<T>::operator-- ()
|
||||
{
|
||||
--this->value[0];
|
||||
--this->value[1];
|
||||
--this->value[2];
|
||||
--this->value[3];
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Binary operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T> operator+
|
||||
(
|
||||
tmat4x2<T> const & m,
|
||||
typename tmat4x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat4x2<T>(
|
||||
m[0] + s,
|
||||
m[1] + s,
|
||||
m[2] + s,
|
||||
m[3] + s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T> operator+
|
||||
(
|
||||
tmat4x2<T> const & m1,
|
||||
tmat4x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat4x2<T>(
|
||||
m1[0] + m2[0],
|
||||
m1[1] + m2[1],
|
||||
m1[2] + m2[2],
|
||||
m1[3] + m2[3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T> operator-
|
||||
(
|
||||
tmat4x2<T> const & m,
|
||||
typename tmat4x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat4x2<T>(
|
||||
m[0] - s,
|
||||
m[1] - s,
|
||||
m[2] - s,
|
||||
m[3] - s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T> operator-
|
||||
(
|
||||
tmat4x2<T> const & m1,
|
||||
tmat4x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat4x2<T>(
|
||||
m1[0] - m2[0],
|
||||
m1[1] - m2[1],
|
||||
m1[2] - m2[2],
|
||||
m1[3] - m2[3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T> operator*
|
||||
(
|
||||
tmat4x2<T> const & m,
|
||||
typename tmat4x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat4x2<T>(
|
||||
m[0] * s,
|
||||
m[1] * s,
|
||||
m[2] * s,
|
||||
m[3] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T> operator*
|
||||
(
|
||||
typename tmat4x2<T>::value_type const & s,
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat4x2<T>(
|
||||
m[0] * s,
|
||||
m[1] * s,
|
||||
m[2] * s,
|
||||
m[3] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat4x2<T>::col_type operator*
|
||||
(
|
||||
tmat4x2<T> const & m,
|
||||
typename tmat4x2<T>::row_type const & v)
|
||||
{
|
||||
return typename tmat4x2<T>::col_type(
|
||||
m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,
|
||||
m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat4x2<T>::row_type operator*
|
||||
(
|
||||
typename tmat4x2<T>::col_type const & v,
|
||||
tmat4x2<T> const & m)
|
||||
{
|
||||
return typename tmat4x2<T>::row_type(
|
||||
v.x * m[0][0] + v.y * m[0][1],
|
||||
v.x * m[1][0] + v.y * m[1][1],
|
||||
v.x * m[2][0] + v.y * m[2][1],
|
||||
v.x * m[3][0] + v.y * m[3][1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat2x2<T> operator*
|
||||
(
|
||||
tmat4x2<T> const & m1,
|
||||
tmat2x4<T> const & m2
|
||||
)
|
||||
{
|
||||
T const SrcA00 = m1[0][0];
|
||||
T const SrcA01 = m1[0][1];
|
||||
T const SrcA10 = m1[1][0];
|
||||
T const SrcA11 = m1[1][1];
|
||||
T const SrcA20 = m1[2][0];
|
||||
T const SrcA21 = m1[2][1];
|
||||
T const SrcA30 = m1[3][0];
|
||||
T const SrcA31 = m1[3][1];
|
||||
|
||||
T const SrcB00 = m2[0][0];
|
||||
T const SrcB01 = m2[0][1];
|
||||
T const SrcB02 = m2[0][2];
|
||||
T const SrcB03 = m2[0][3];
|
||||
T const SrcB10 = m2[1][0];
|
||||
T const SrcB11 = m2[1][1];
|
||||
T const SrcB12 = m2[1][2];
|
||||
T const SrcB13 = m2[1][3];
|
||||
|
||||
tmat2x2<T> Result(tmat2x2<T>::null);
|
||||
Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03;
|
||||
Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03;
|
||||
Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13;
|
||||
Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T> operator/
|
||||
(
|
||||
tmat4x2<T> const & m,
|
||||
typename tmat4x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat4x2<T>(
|
||||
m[0] / s,
|
||||
m[1] / s,
|
||||
m[2] / s,
|
||||
m[3] / s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T> operator/
|
||||
(
|
||||
typename tmat4x2<T>::value_type const & s,
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat4x2<T>(
|
||||
s / m[0],
|
||||
s / m[1],
|
||||
s / m[2],
|
||||
s / m[3]);
|
||||
}
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
inline tmat4x2<T> const operator-
|
||||
(
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat4x2<T>(
|
||||
-m[0],
|
||||
-m[1],
|
||||
-m[2],
|
||||
-m[3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T> const operator++
|
||||
(
|
||||
tmat4x2<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat4x2<T>(
|
||||
m[0] + typename tmat4x2<T>::value_type(1),
|
||||
m[1] + typename tmat4x2<T>::value_type(1),
|
||||
m[2] + typename tmat4x2<T>::value_type(1),
|
||||
m[3] + typename tmat4x2<T>::value_type(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x2<T> const operator--
|
||||
(
|
||||
tmat4x2<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat4x2<T>(
|
||||
m[0] - typename tmat4x2<T>::value_type(1),
|
||||
m[1] - typename tmat4x2<T>::value_type(1),
|
||||
m[2] - typename tmat4x2<T>::value_type(1),
|
||||
m[3] - typename tmat4x2<T>::value_type(1));
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Boolean operators
|
||||
|
||||
template <typename T>
|
||||
inline bool operator==
|
||||
(
|
||||
tmat4x2<T> const & m1,
|
||||
tmat4x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline bool operator!=
|
||||
(
|
||||
tmat4x2<T> const & m1,
|
||||
tmat4x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);
|
||||
}
|
||||
|
||||
} //namespace detail
|
||||
} //namespace glm
|
||||
@@ -1,222 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-08-04
|
||||
// Updated : 2010-02-11
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat4x3.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_mat4x3
|
||||
#define glm_core_type_mat4x3
|
||||
|
||||
#include "type_mat.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
void main_mat4x3();
|
||||
}//namespace test
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
template <typename T> struct tmat2x2;
|
||||
template <typename T> struct tmat2x3;
|
||||
template <typename T> struct tmat2x4;
|
||||
template <typename T> struct tmat3x2;
|
||||
template <typename T> struct tmat3x3;
|
||||
template <typename T> struct tmat3x4;
|
||||
template <typename T> struct tmat4x2;
|
||||
template <typename T> struct tmat4x3;
|
||||
template <typename T> struct tmat4x4;
|
||||
|
||||
//! \brief Template for 4 columns and 3 rows matrix of floating-point numbers.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tmat4x3
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec3<T> col_type;
|
||||
typedef tvec4<T> row_type;
|
||||
static size_type col_size();
|
||||
static size_type row_size();
|
||||
|
||||
typedef tmat4x3<T> type;
|
||||
typedef tmat3x4<T> transpose_type;
|
||||
|
||||
private:
|
||||
// Data
|
||||
col_type value[4];
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
tmat4x3();
|
||||
tmat4x3(tmat4x3 const & m);
|
||||
|
||||
explicit tmat4x3(
|
||||
ctor Null);
|
||||
explicit tmat4x3(
|
||||
value_type const & x);
|
||||
explicit tmat4x3(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1,
|
||||
value_type const & x2, value_type const & y2, value_type const & z2,
|
||||
value_type const & x3, value_type const & y3, value_type const & z3);
|
||||
explicit tmat4x3(
|
||||
col_type const & v0,
|
||||
col_type const & v1,
|
||||
col_type const & v2,
|
||||
col_type const & v3);
|
||||
|
||||
// Conversion
|
||||
template <typename U>
|
||||
explicit tmat4x3(tmat4x3<U> const & m);
|
||||
|
||||
explicit tmat4x3(tmat2x2<T> const & x);
|
||||
explicit tmat4x3(tmat3x3<T> const & x);
|
||||
explicit tmat4x3(tmat4x4<T> const & x);
|
||||
explicit tmat4x3(tmat2x3<T> const & x);
|
||||
explicit tmat4x3(tmat3x2<T> const & x);
|
||||
explicit tmat4x3(tmat2x4<T> const & x);
|
||||
explicit tmat4x3(tmat4x2<T> const & x);
|
||||
explicit tmat4x3(tmat3x4<T> const & x);
|
||||
|
||||
// Accesses
|
||||
col_type & operator[](size_type i);
|
||||
col_type const & operator[](size_type i) const;
|
||||
|
||||
// Unary updatable operators
|
||||
tmat4x3<T> & operator= (tmat4x3<T> const & m);
|
||||
template <typename U>
|
||||
tmat4x3<T> & operator= (tmat4x3<U> const & m);
|
||||
template <typename U>
|
||||
tmat4x3<T> & operator+= (U const & s);
|
||||
template <typename U>
|
||||
tmat4x3<T> & operator+= (tmat4x3<U> const & m);
|
||||
template <typename U>
|
||||
tmat4x3<T> & operator-= (U const & s);
|
||||
template <typename U>
|
||||
tmat4x3<T> & operator-= (tmat4x3<U> const & m);
|
||||
template <typename U>
|
||||
tmat4x3<T> & operator*= (U const & s);
|
||||
template <typename U>
|
||||
tmat4x3<T> & operator*= (tmat4x3<U> const & m);
|
||||
template <typename U>
|
||||
tmat4x3<T> & operator/= (U const & s);
|
||||
|
||||
tmat4x3<T> & operator++ ();
|
||||
tmat4x3<T> & operator-- ();
|
||||
};
|
||||
|
||||
// Binary operators
|
||||
template <typename T>
|
||||
tmat4x3<T> operator+ (
|
||||
tmat4x3<T> const & m,
|
||||
typename tmat4x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat4x3<T> operator+ (
|
||||
tmat4x3<T> const & m1,
|
||||
tmat4x3<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat4x3<T> operator- (
|
||||
tmat4x3<T> const & m,
|
||||
typename tmat4x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat4x3<T> operator- (
|
||||
tmat4x3<T> const & m1,
|
||||
tmat4x3<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat4x3<T> operator* (
|
||||
tmat4x3<T> const & m,
|
||||
typename tmat4x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat4x3<T> operator* (
|
||||
typename tmat4x3<T>::value_type const & s,
|
||||
tmat4x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat4x3<T>::col_type operator* (
|
||||
tmat4x3<T> const & m,
|
||||
typename tmat4x3<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat4x3<T>::row_type operator* (
|
||||
typename tmat4x3<T>::col_type const & v,
|
||||
tmat4x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> operator* (
|
||||
tmat4x3<T> const & m1,
|
||||
tmat3x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat4x3<T> operator/ (
|
||||
tmat4x3<T> const & m,
|
||||
typename tmat4x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat4x3<T> operator/ (
|
||||
typename tmat4x3<T>::value_type const & s,
|
||||
tmat4x3<T> const & m);
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
tmat4x3<T> const operator- (
|
||||
tmat4x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat4x3<T> const operator-- (
|
||||
tmat4x3<T> const & m,
|
||||
int);
|
||||
|
||||
template <typename T>
|
||||
tmat4x3<T> const operator++ (
|
||||
tmat4x3<T> const & m,
|
||||
int);
|
||||
|
||||
} //namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
|
||||
namespace precision
|
||||
{
|
||||
//! 4 columns of 3 components matrix of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat4x3<lowp_float> lowp_mat4x3;
|
||||
//! 4 columns of 3 components matrix of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat4x3<mediump_float> mediump_mat4x3;
|
||||
//! 4 columns of 3 components matrix of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat4x3<highp_float> highp_mat4x3;
|
||||
}
|
||||
//namespace precision
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
} //namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_mat4x3.inl"
|
||||
#endif
|
||||
|
||||
#endif//glm_core_type_mat4x3
|
||||
@@ -1,623 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-04-17
|
||||
// Updated : 2010-02-02
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat4x3.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
inline typename tmat4x3<T>::size_type tmat4x3<T>::col_size()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat4x3<T>::size_type tmat4x3<T>::row_size()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat4x3<T>::col_type &
|
||||
tmat4x3<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
)
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat4x3<T>::col_type const &
|
||||
tmat4x3<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
) const
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Constructors
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>::tmat4x3()
|
||||
{
|
||||
value_type const Zero(0);
|
||||
value_type const One(1);
|
||||
this->value[0] = col_type(One, Zero, Zero);
|
||||
this->value[1] = col_type(Zero, One, Zero);
|
||||
this->value[2] = col_type(Zero, Zero, One);
|
||||
this->value[3] = col_type(Zero, Zero, Zero);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>::tmat4x3
|
||||
(
|
||||
tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m.value[0];
|
||||
this->value[1] = m.value[1];
|
||||
this->value[2] = m.value[2];
|
||||
this->value[3] = m.value[3];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>::tmat4x3
|
||||
(
|
||||
ctor
|
||||
)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>::tmat4x3
|
||||
(
|
||||
value_type const & s
|
||||
)
|
||||
{
|
||||
value_type const Zero(0);
|
||||
this->value[0] = col_type(s, Zero, Zero);
|
||||
this->value[1] = col_type(Zero, s, Zero);
|
||||
this->value[2] = col_type(Zero, Zero, s);
|
||||
this->value[3] = col_type(Zero, Zero, Zero);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>::tmat4x3
|
||||
(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1,
|
||||
value_type const & x2, value_type const & y2, value_type const & z2,
|
||||
value_type const & x3, value_type const & y3, value_type const & z3
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(x0, y0, z0);
|
||||
this->value[1] = col_type(x1, y1, z1);
|
||||
this->value[2] = col_type(x2, y2, z2);
|
||||
this->value[3] = col_type(x3, y3, z3);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>::tmat4x3
|
||||
(
|
||||
col_type const & v0,
|
||||
col_type const & v1,
|
||||
col_type const & v2,
|
||||
col_type const & v3
|
||||
)
|
||||
{
|
||||
this->value[0] = v0;
|
||||
this->value[1] = v1;
|
||||
this->value[2] = v2;
|
||||
this->value[3] = v3;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Conversions
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x3<T>::tmat4x3
|
||||
(
|
||||
tmat4x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
this->value[3] = col_type(m[3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>::tmat4x3
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], value_type(0));
|
||||
this->value[1] = col_type(m[1], value_type(0));
|
||||
this->value[2] = col_type(m[2], value_type(1));
|
||||
this->value[3] = col_type(value_type(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>::tmat4x3
|
||||
(
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
this->value[3] = col_type(value_type(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>::tmat4x3
|
||||
(
|
||||
tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
this->value[3] = col_type(m[3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>::tmat4x3
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(value_type(0), value_type(0), value_type(1));
|
||||
this->value[3] = col_type(value_type(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>::tmat4x3
|
||||
(
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], value_type(0));
|
||||
this->value[1] = col_type(m[1], value_type(0));
|
||||
this->value[2] = col_type(m[2], value_type(1));
|
||||
this->value[3] = col_type(value_type(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>::tmat4x3
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(value_type(0), value_type(0), value_type(1));
|
||||
this->value[3] = col_type(value_type(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>::tmat4x3
|
||||
(
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], value_type(0));
|
||||
this->value[1] = col_type(m[1], value_type(0));
|
||||
this->value[2] = col_type(m[2], value_type(1));
|
||||
this->value[3] = col_type(m[3], value_type(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>::tmat4x3
|
||||
(
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
this->value[2] = col_type(m[2]);
|
||||
this->value[3] = col_type(value_type(0));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Unary updatable operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T>& tmat4x3<T>::operator=
|
||||
(
|
||||
tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
this->value[2] = m[2];
|
||||
this->value[3] = m[3];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x3<T>& tmat4x3<T>::operator=
|
||||
(
|
||||
tmat4x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
this->value[2] = m[2];
|
||||
this->value[3] = m[3];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x3<T> & tmat4x3<T>::operator+=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] += s;
|
||||
this->value[1] += s;
|
||||
this->value[2] += s;
|
||||
this->value[3] += s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x3<T> & tmat4x3<T>::operator+=
|
||||
(
|
||||
tmat4x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] += m[0];
|
||||
this->value[1] += m[1];
|
||||
this->value[2] += m[2];
|
||||
this->value[3] += m[3];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x3<T> & tmat4x3<T>::operator-=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] -= s;
|
||||
this->value[1] -= s;
|
||||
this->value[2] -= s;
|
||||
this->value[3] -= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x3<T> & tmat4x3<T>::operator-=
|
||||
(
|
||||
tmat4x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] -= m[0];
|
||||
this->value[1] -= m[1];
|
||||
this->value[2] -= m[2];
|
||||
this->value[3] -= m[3];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x3<T> & tmat4x3<T>::operator*=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] *= s;
|
||||
this->value[1] *= s;
|
||||
this->value[2] *= s;
|
||||
this->value[3] *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x3<T> & tmat4x3<T>::operator*=
|
||||
(
|
||||
tmat4x3<U> const & m
|
||||
)
|
||||
{
|
||||
return (*this = tmat4x3<T>(*this * m));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
inline tmat4x3<T> & tmat4x3<T>::operator/=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] /= s;
|
||||
this->value[1] /= s;
|
||||
this->value[2] /= s;
|
||||
this->value[3] /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T> & tmat4x3<T>::operator++ ()
|
||||
{
|
||||
++this->value[0];
|
||||
++this->value[1];
|
||||
++this->value[2];
|
||||
++this->value[3];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T> & tmat4x3<T>::operator-- ()
|
||||
{
|
||||
--this->value[0];
|
||||
--this->value[1];
|
||||
--this->value[2];
|
||||
--this->value[3];
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Binary operators
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T> operator+ (
|
||||
tmat4x3<T> const & m,
|
||||
typename tmat4x3<T>::value_type const & s)
|
||||
{
|
||||
return tmat4x3<T>(
|
||||
m[0] + s,
|
||||
m[1] + s,
|
||||
m[2] + s,
|
||||
m[3] + s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T> operator+ (
|
||||
tmat4x3<T> const & m1,
|
||||
tmat4x3<T> const & m2)
|
||||
{
|
||||
return tmat4x3<T>(
|
||||
m1[0] + m2[0],
|
||||
m1[1] + m2[1],
|
||||
m1[2] + m2[2],
|
||||
m1[3] + m2[3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T> operator- (
|
||||
tmat4x3<T> const & m,
|
||||
typename tmat4x3<T>::value_type const & s)
|
||||
{
|
||||
return tmat4x3<T>(
|
||||
m[0] - s,
|
||||
m[1] - s,
|
||||
m[2] - s,
|
||||
m[3] - s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T> operator- (
|
||||
tmat4x3<T> const & m1,
|
||||
tmat4x3<T> const & m2)
|
||||
{
|
||||
return tmat4x3<T>(
|
||||
m1[0] - m2[0],
|
||||
m1[1] - m2[1],
|
||||
m1[2] - m2[2],
|
||||
m1[3] - m2[3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T> operator* (
|
||||
tmat4x3<T> const & m,
|
||||
typename tmat4x3<T>::value_type const & s)
|
||||
{
|
||||
return tmat4x3<T>(
|
||||
m[0] * s,
|
||||
m[1] * s,
|
||||
m[2] * s,
|
||||
m[3] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T> operator* (
|
||||
typename tmat4x3<T>::value_type const & s,
|
||||
tmat4x3<T> const & m)
|
||||
{
|
||||
return tmat4x3<T>(
|
||||
m[0] * s,
|
||||
m[1] * s,
|
||||
m[2] * s,
|
||||
m[3] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat4x3<T>::col_type operator*
|
||||
(
|
||||
tmat4x3<T> const & m,
|
||||
typename tmat4x3<T>::row_type const & v)
|
||||
{
|
||||
return typename tmat4x3<T>::col_type(
|
||||
m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,
|
||||
m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w,
|
||||
m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tmat4x3<T>::row_type operator*
|
||||
(
|
||||
typename tmat4x3<T>::col_type const & v,
|
||||
tmat4x3<T> const & m)
|
||||
{
|
||||
return typename tmat4x3<T>::row_type(
|
||||
v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2],
|
||||
v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2],
|
||||
v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2],
|
||||
v.x * m[3][0] + v.y * m[3][1] + v.z * m[3][2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat3x3<T> operator*
|
||||
(
|
||||
tmat4x3<T> const & m1,
|
||||
tmat3x4<T> const & m2
|
||||
)
|
||||
{
|
||||
T const SrcA00 = m1[0][0];
|
||||
T const SrcA01 = m1[0][1];
|
||||
T const SrcA02 = m1[0][2];
|
||||
T const SrcA10 = m1[1][0];
|
||||
T const SrcA11 = m1[1][1];
|
||||
T const SrcA12 = m1[1][2];
|
||||
T const SrcA20 = m1[2][0];
|
||||
T const SrcA21 = m1[2][1];
|
||||
T const SrcA22 = m1[2][2];
|
||||
T const SrcA30 = m1[3][0];
|
||||
T const SrcA31 = m1[3][1];
|
||||
T const SrcA32 = m1[3][2];
|
||||
|
||||
T const SrcB00 = m2[0][0];
|
||||
T const SrcB01 = m2[0][1];
|
||||
T const SrcB02 = m2[0][2];
|
||||
T const SrcB03 = m2[0][3];
|
||||
T const SrcB10 = m2[1][0];
|
||||
T const SrcB11 = m2[1][1];
|
||||
T const SrcB12 = m2[1][2];
|
||||
T const SrcB13 = m2[1][3];
|
||||
T const SrcB20 = m2[2][0];
|
||||
T const SrcB21 = m2[2][1];
|
||||
T const SrcB22 = m2[2][2];
|
||||
T const SrcB23 = m2[2][3];
|
||||
|
||||
tmat3x3<T> Result(tmat3x3<T>::null);
|
||||
Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03;
|
||||
Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03;
|
||||
Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02 + SrcA32 * SrcB03;
|
||||
Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13;
|
||||
Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13;
|
||||
Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12 + SrcA32 * SrcB13;
|
||||
Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22 + SrcA30 * SrcB23;
|
||||
Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22 + SrcA31 * SrcB23;
|
||||
Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22 + SrcA32 * SrcB23;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T> operator/
|
||||
(
|
||||
tmat4x3<T> const & m,
|
||||
typename tmat4x3<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat4x3<T>(
|
||||
m[0] / s,
|
||||
m[1] / s,
|
||||
m[2] / s,
|
||||
m[3] / s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T> operator/
|
||||
(
|
||||
typename tmat4x3<T>::value_type const & s,
|
||||
tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat4x3<T>(
|
||||
s / m[0],
|
||||
s / m[1],
|
||||
s / m[2],
|
||||
s / m[3]);
|
||||
}
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
inline tmat4x3<T> const operator-
|
||||
(
|
||||
tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat4x3<T>(
|
||||
-m[0],
|
||||
-m[1],
|
||||
-m[2],
|
||||
-m[3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T> const operator++
|
||||
(
|
||||
tmat4x3<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat4x3<T>(
|
||||
m[0] + T(1),
|
||||
m[1] + T(1),
|
||||
m[2] + T(1),
|
||||
m[3] + T(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tmat4x3<T> const operator--
|
||||
(
|
||||
tmat4x3<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat4x3<T>(
|
||||
m[0] - T(1),
|
||||
m[1] - T(1),
|
||||
m[2] - T(1),
|
||||
m[3] - T(1));
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Boolean operators
|
||||
|
||||
template <typename T>
|
||||
inline bool operator==
|
||||
(
|
||||
tmat4x3<T> const & m1,
|
||||
tmat4x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline bool operator!=
|
||||
(
|
||||
tmat4x3<T> const & m1,
|
||||
tmat4x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);
|
||||
}
|
||||
|
||||
} //namespace detail
|
||||
} //namespace glm
|
||||
|
||||
@@ -1,250 +1,320 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2005-01-27
|
||||
// Updated : 2008-08-30
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat4x4.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type_mat4x4.hpp
|
||||
/// @date 2005-01-27 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_mat4x4
|
||||
#define glm_core_type_mat4x4
|
||||
|
||||
#include "type_mat.hpp"
|
||||
|
||||
namespace glm
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
namespace test
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
template <typename T> struct tmat2x2;
|
||||
template <typename T> struct tmat2x3;
|
||||
template <typename T> struct tmat2x4;
|
||||
template <typename T> struct tmat3x2;
|
||||
template <typename T> struct tmat3x3;
|
||||
template <typename T> struct tmat3x4;
|
||||
template <typename T> struct tmat4x2;
|
||||
template <typename T> struct tmat4x3;
|
||||
template <typename T> struct tmat4x4;
|
||||
|
||||
template <typename T>
|
||||
struct tmat4x4
|
||||
{
|
||||
void main_mat4x4();
|
||||
}//namespace test
|
||||
enum ctor{null};
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec4<T> col_type;
|
||||
typedef tvec4<T> row_type;
|
||||
typedef tmat4x4<T> type;
|
||||
typedef tmat4x4<T> transpose_type;
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
template <typename T> struct tmat2x2;
|
||||
template <typename T> struct tmat2x3;
|
||||
template <typename T> struct tmat2x4;
|
||||
template <typename T> struct tmat3x2;
|
||||
template <typename T> struct tmat3x3;
|
||||
template <typename T> struct tmat3x4;
|
||||
template <typename T> struct tmat4x2;
|
||||
template <typename T> struct tmat4x3;
|
||||
template <typename T> struct tmat4x4;
|
||||
static GLM_FUNC_DECL size_type col_size();
|
||||
static GLM_FUNC_DECL size_type row_size();
|
||||
|
||||
//! \brief Template for 4 * 4 matrix of floating-point numbers.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tmat4x4
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec4<T> col_type;
|
||||
typedef tvec4<T> row_type;
|
||||
static size_type col_size();
|
||||
static size_type row_size();
|
||||
GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
|
||||
|
||||
typedef tmat4x4<T> type;
|
||||
typedef tmat4x4<T> transpose_type;
|
||||
public:
|
||||
/// Implementation detail
|
||||
/// @cond DETAIL
|
||||
GLM_FUNC_DECL tmat4x4<T> _inverse() const;
|
||||
/// @endcond
|
||||
|
||||
public:
|
||||
// Implementation detail
|
||||
tmat4x4<T> _inverse() const;
|
||||
private:
|
||||
// Data
|
||||
col_type value[4];
|
||||
|
||||
private:
|
||||
// Data
|
||||
col_type value[4];
|
||||
public:
|
||||
// Constructors
|
||||
GLM_FUNC_DECL tmat4x4();
|
||||
GLM_FUNC_DECL tmat4x4(tmat4x4 const & m);
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
tmat4x4();
|
||||
tmat4x4(tmat4x4 const & m);
|
||||
GLM_FUNC_DECL explicit tmat4x4(
|
||||
ctor Null);
|
||||
GLM_FUNC_DECL explicit tmat4x4(
|
||||
value_type const & x);
|
||||
GLM_FUNC_DECL explicit tmat4x4(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1,
|
||||
value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2,
|
||||
value_type const & x3, value_type const & y3, value_type const & z3, value_type const & w3);
|
||||
GLM_FUNC_DECL explicit tmat4x4(
|
||||
col_type const & v0,
|
||||
col_type const & v1,
|
||||
col_type const & v2,
|
||||
col_type const & v3);
|
||||
|
||||
explicit tmat4x4(
|
||||
ctor Null);
|
||||
explicit tmat4x4(
|
||||
value_type const & x);
|
||||
explicit tmat4x4(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1,
|
||||
value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2,
|
||||
value_type const & x3, value_type const & y3, value_type const & z3, value_type const & w3);
|
||||
explicit tmat4x4(
|
||||
col_type const & v0,
|
||||
col_type const & v1,
|
||||
col_type const & v2,
|
||||
col_type const & v3);
|
||||
//////////////////////////////////////
|
||||
// Conversions
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tmat4x4(
|
||||
U const & x);
|
||||
|
||||
template <
|
||||
typename X1, typename Y1, typename Z1, typename W1,
|
||||
typename X2, typename Y2, typename Z2, typename W2,
|
||||
typename X3, typename Y3, typename Z3, typename W3,
|
||||
typename X4, typename Y4, typename Z4, typename W4>
|
||||
GLM_FUNC_DECL explicit tmat4x4(
|
||||
X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
|
||||
X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,
|
||||
X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3,
|
||||
X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4);
|
||||
|
||||
template <typename V1, typename V2, typename V3, typename V4>
|
||||
GLM_FUNC_DECL explicit tmat4x4(
|
||||
tvec4<V1> const & v1,
|
||||
tvec4<V2> const & v2,
|
||||
tvec4<V3> const & v3,
|
||||
tvec4<V4> const & v4);
|
||||
|
||||
// Matrix conversions
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tmat4x4(tmat4x4<U> const & m);
|
||||
|
||||
// Conversions
|
||||
template <typename U>
|
||||
explicit tmat4x4(tmat4x4<U> const & m);
|
||||
GLM_FUNC_DECL explicit tmat4x4(tmat2x2<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat4x4(tmat3x3<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat4x4(tmat2x3<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat4x4(tmat3x2<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat4x4(tmat2x4<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat4x4(tmat4x2<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat4x4(tmat3x4<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat4x4(tmat4x3<T> const & x);
|
||||
|
||||
explicit tmat4x4(tmat2x2<T> const & x);
|
||||
explicit tmat4x4(tmat3x3<T> const & x);
|
||||
explicit tmat4x4(tmat2x3<T> const & x);
|
||||
explicit tmat4x4(tmat3x2<T> const & x);
|
||||
explicit tmat4x4(tmat2x4<T> const & x);
|
||||
explicit tmat4x4(tmat4x2<T> const & x);
|
||||
explicit tmat4x4(tmat3x4<T> const & x);
|
||||
explicit tmat4x4(tmat4x3<T> const & x);
|
||||
// Accesses
|
||||
GLM_FUNC_DECL col_type & operator[](size_type i);
|
||||
GLM_FUNC_DECL col_type const & operator[](size_type i) const;
|
||||
|
||||
// Accesses
|
||||
col_type & operator[](size_type i);
|
||||
col_type const & operator[](size_type i) const;
|
||||
// Unary updatable operators
|
||||
GLM_FUNC_DECL tmat4x4<T> & operator= (tmat4x4<T> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat4x4<T> & operator= (tmat4x4<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat4x4<T> & operator+= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat4x4<T> & operator+= (tmat4x4<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat4x4<T> & operator-= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat4x4<T> & operator-= (tmat4x4<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat4x4<T> & operator*= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat4x4<T> & operator*= (tmat4x4<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat4x4<T> & operator/= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat4x4<T> & operator/= (tmat4x4<U> const & m);
|
||||
GLM_FUNC_DECL tmat4x4<T> & operator++ ();
|
||||
GLM_FUNC_DECL tmat4x4<T> & operator-- ();
|
||||
};
|
||||
|
||||
// Unary updatable operators
|
||||
tmat4x4<T> & operator= (tmat4x4<T> const & m);
|
||||
template <typename U>
|
||||
tmat4x4<T> & operator= (tmat4x4<U> const & m);
|
||||
template <typename U>
|
||||
tmat4x4<T> & operator+= (U const & s);
|
||||
template <typename U>
|
||||
tmat4x4<T> & operator+= (tmat4x4<U> const & m);
|
||||
template <typename U>
|
||||
tmat4x4<T> & operator-= (U const & s);
|
||||
template <typename U>
|
||||
tmat4x4<T> & operator-= (tmat4x4<U> const & m);
|
||||
template <typename U>
|
||||
tmat4x4<T> & operator*= (U const & s);
|
||||
template <typename U>
|
||||
tmat4x4<T> & operator*= (tmat4x4<U> const & m);
|
||||
template <typename U>
|
||||
tmat4x4<T> & operator/= (U const & s);
|
||||
template <typename U>
|
||||
tmat4x4<T> & operator/= (tmat4x4<U> const & m);
|
||||
tmat4x4<T> & operator++ ();
|
||||
tmat4x4<T> & operator-- ();
|
||||
};
|
||||
// Binary operators
|
||||
template <typename T>
|
||||
tmat4x4<T> operator+ (
|
||||
tmat4x4<T> const & m,
|
||||
typename tmat4x4<T>::value_type const & s);
|
||||
|
||||
// Binary operators
|
||||
template <typename T>
|
||||
tmat4x4<T> operator+ (
|
||||
tmat4x4<T> const & m,
|
||||
typename tmat4x4<T>::value_type const & s);
|
||||
template <typename T>
|
||||
tmat4x4<T> operator+ (
|
||||
typename tmat4x4<T>::value_type const & s,
|
||||
tmat4x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat4x4<T> operator+ (
|
||||
typename tmat4x4<T>::value_type const & s,
|
||||
tmat4x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat4x4<T> operator+ (
|
||||
tmat4x4<T> const & m1,
|
||||
tmat4x4<T> const & m2);
|
||||
template <typename T>
|
||||
tmat4x4<T> operator+ (
|
||||
tmat4x4<T> const & m1,
|
||||
tmat4x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat4x4<T> operator- (
|
||||
tmat4x4<T> const & m,
|
||||
typename tmat4x4<T>::value_type const & s);
|
||||
template <typename T>
|
||||
tmat4x4<T> operator- (
|
||||
tmat4x4<T> const & m,
|
||||
typename tmat4x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat4x4<T> operator- (
|
||||
typename tmat4x4<T>::value_type const & s,
|
||||
tmat4x4<T> const & m);
|
||||
template <typename T>
|
||||
tmat4x4<T> operator- (
|
||||
typename tmat4x4<T>::value_type const & s,
|
||||
tmat4x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat4x4<T> operator- (
|
||||
tmat4x4<T> const & m1,
|
||||
tmat4x4<T> const & m2);
|
||||
template <typename T>
|
||||
tmat4x4<T> operator- (
|
||||
tmat4x4<T> const & m1,
|
||||
tmat4x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat4x4<T> operator* (
|
||||
tmat4x4<T> const & m,
|
||||
typename tmat4x4<T>::value_type const & s);
|
||||
template <typename T>
|
||||
tmat4x4<T> operator* (
|
||||
tmat4x4<T> const & m,
|
||||
typename tmat4x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat4x4<T> operator* (
|
||||
typename tmat4x4<T>::value_type const & s,
|
||||
tmat4x4<T> const & m);
|
||||
template <typename T>
|
||||
tmat4x4<T> operator* (
|
||||
typename tmat4x4<T>::value_type const & s,
|
||||
tmat4x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat4x4<T>::col_type operator* (
|
||||
tmat4x4<T> const & m,
|
||||
typename tmat4x4<T>::row_type const & v);
|
||||
template <typename T>
|
||||
typename tmat4x4<T>::col_type operator* (
|
||||
tmat4x4<T> const & m,
|
||||
typename tmat4x4<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat4x4<T>::row_type operator* (
|
||||
typename tmat4x4<T>::col_type const & v,
|
||||
tmat4x4<T> const & m);
|
||||
template <typename T>
|
||||
typename tmat4x4<T>::row_type operator* (
|
||||
typename tmat4x4<T>::col_type const & v,
|
||||
tmat4x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator* (
|
||||
tmat4x4<T> const & m1,
|
||||
tmat2x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat4x4<T> operator* (
|
||||
tmat4x4<T> const & m1,
|
||||
tmat4x4<T> const & m2);
|
||||
template <typename T>
|
||||
tmat3x4<T> operator* (
|
||||
tmat4x4<T> const & m1,
|
||||
tmat3x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat4x4<T> operator/ (
|
||||
tmat4x4<T> const & m,
|
||||
typename tmat4x4<T>::value_type const & s);
|
||||
template <typename T>
|
||||
tmat4x4<T> operator* (
|
||||
tmat4x4<T> const & m1,
|
||||
tmat4x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat4x4<T> operator/ (
|
||||
typename tmat4x4<T>::value_type const & s,
|
||||
tmat4x4<T> const & m);
|
||||
template <typename T>
|
||||
tmat4x4<T> operator/ (
|
||||
tmat4x4<T> const & m,
|
||||
typename tmat4x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
typename tmat4x4<T>::col_type operator/ (
|
||||
tmat4x4<T> const & m,
|
||||
typename tmat4x4<T>::row_type const & v);
|
||||
template <typename T>
|
||||
tmat4x4<T> operator/ (
|
||||
typename tmat4x4<T>::value_type const & s,
|
||||
tmat4x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat4x4<T>::row_type operator/ (
|
||||
typename tmat4x4<T>::col_type & v,
|
||||
tmat4x4<T> const & m);
|
||||
template <typename T>
|
||||
typename tmat4x4<T>::col_type operator/ (
|
||||
tmat4x4<T> const & m,
|
||||
typename tmat4x4<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
tmat4x4<T> operator/ (
|
||||
tmat4x4<T> const & m1,
|
||||
tmat4x4<T> const & m2);
|
||||
template <typename T>
|
||||
typename tmat4x4<T>::row_type operator/ (
|
||||
typename tmat4x4<T>::col_type & v,
|
||||
tmat4x4<T> const & m);
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
tmat4x4<T> const operator- (
|
||||
tmat4x4<T> const & m);
|
||||
template <typename T>
|
||||
tmat4x4<T> operator/ (
|
||||
tmat4x4<T> const & m1,
|
||||
tmat4x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat4x4<T> const operator-- (
|
||||
tmat4x4<T> const & m, int);
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
tmat4x4<T> const operator- (
|
||||
tmat4x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat4x4<T> const operator++ (
|
||||
tmat4x4<T> const & m, int);
|
||||
template <typename T>
|
||||
tmat4x4<T> const operator-- (
|
||||
tmat4x4<T> const & m, int);
|
||||
|
||||
} //namespace detail
|
||||
template <typename T>
|
||||
tmat4x4<T> const operator++ (
|
||||
tmat4x4<T> const & m, int);
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
} //namespace detail
|
||||
|
||||
namespace precision
|
||||
{
|
||||
//! 4 columns of 4 components matrix of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat4x4<lowp_float> lowp_mat4x4;
|
||||
//! 4 columns of 4 components matrix of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat4x4<mediump_float> mediump_mat4x4;
|
||||
//! 4 columns of 4 components matrix of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat4x4<highp_float> highp_mat4x4;
|
||||
}
|
||||
//namespace precision
|
||||
/// @addtogroup core_precision
|
||||
/// @{
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
} //namespace glm
|
||||
/// 4 columns of 4 components matrix of low precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tmat4x4<lowp_float> lowp_mat4;
|
||||
|
||||
/// 4 columns of 4 components matrix of medium precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tmat4x4<mediump_float> mediump_mat4;
|
||||
|
||||
/// 4 columns of 4 components matrix of high precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tmat4x4<highp_float> highp_mat4;
|
||||
|
||||
/// 4 columns of 4 components matrix of low precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tmat4x4<lowp_float> lowp_mat4x4;
|
||||
|
||||
/// 4 columns of 4 components matrix of medium precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tmat4x4<mediump_float> mediump_mat4x4;
|
||||
|
||||
/// 4 columns of 4 components matrix of high precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tmat4x4<highp_float> highp_mat4x4;
|
||||
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_mat4x4.inl"
|
||||
#endif
|
||||
#endif//GLM_EXTERNAL_TEMPLATE
|
||||
|
||||
#endif //glm_core_type_mat4x4
|
||||
#endif//glm_core_type_mat4x4
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,11 +1,30 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-10-05
|
||||
// Updated : 2008-10-05
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_size.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type_size.hpp
|
||||
/// @date 2008-10-05 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_size
|
||||
#define glm_core_type_size
|
||||
|
||||
@@ -1,11 +1,30 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-01-26
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_vec.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type_vec.hpp
|
||||
/// @date 2010-01-26 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_vec
|
||||
#define glm_core_type_vec
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type_vec.inl
|
||||
/// @date 2011-06-15 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -1,11 +1,30 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-25
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_vec1.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type_vec1.hpp
|
||||
/// @date 2008-08-25 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_gentype1
|
||||
#define glm_core_type_gentype1
|
||||
@@ -16,38 +35,32 @@
|
||||
#include "type_size.hpp"
|
||||
#include "_swizzle.hpp"
|
||||
|
||||
namespace glm
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
namespace test
|
||||
template <typename T> struct tref1;
|
||||
template <typename T> struct tref2;
|
||||
template <typename T> struct tref3;
|
||||
template <typename T> struct tref4;
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
|
||||
template <typename T>
|
||||
struct tvec1
|
||||
{
|
||||
void main_vec1();
|
||||
}//namespace test
|
||||
enum ctor{null};
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T> struct tref1;
|
||||
template <typename T> struct tref2;
|
||||
template <typename T> struct tref3;
|
||||
template <typename T> struct tref4;
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec1<T> type;
|
||||
typedef tvec1<bool> bool_type;
|
||||
|
||||
template <typename T>
|
||||
struct tvec1
|
||||
{
|
||||
enum ctor{null};
|
||||
GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
|
||||
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
static size_type value_size();
|
||||
|
||||
typedef tvec1<T> type;
|
||||
typedef tvec1<bool> bool_type;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Data
|
||||
//////////////////////////////////////
|
||||
// Data
|
||||
|
||||
# if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
|
||||
value_type x;
|
||||
@@ -55,123 +68,145 @@ namespace glm
|
||||
union {value_type x, r, s;};
|
||||
# endif//GLM_COMPONENT
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
value_type & operator[](size_type i);
|
||||
value_type const & operator[](size_type i) const;
|
||||
GLM_FUNC_DECL value_type & operator[](size_type i);
|
||||
GLM_FUNC_DECL value_type const & operator[](size_type i) const;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
|
||||
tvec1();
|
||||
tvec1(tvec1<T> const & v);
|
||||
GLM_FUNC_DECL tvec1();
|
||||
GLM_FUNC_DECL tvec1(tvec1<T> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
|
||||
explicit tvec1(
|
||||
ctor);
|
||||
explicit tvec1(
|
||||
value_type const & s);
|
||||
GLM_FUNC_DECL explicit tvec1(
|
||||
ctor);
|
||||
GLM_FUNC_DECL explicit tvec1(
|
||||
value_type const & s);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle constructors
|
||||
//////////////////////////////////////
|
||||
// Swizzle constructors
|
||||
|
||||
tvec1(tref1<T> const & r);
|
||||
GLM_FUNC_DECL tvec1(tref1<T> const & r);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion scalar constructors
|
||||
//////////////////////////////////////
|
||||
// Convertion scalar constructors
|
||||
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec1(U const & s);
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tvec1(U const & s);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion vector constructors
|
||||
//////////////////////////////////////
|
||||
// Convertion vector constructors
|
||||
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec1(tvec2<U> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec1(tvec3<U> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec1(tvec4<U> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tvec1(tvec2<U> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tvec1(tvec3<U> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tvec1(tvec4<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary arithmetic operators
|
||||
//////////////////////////////////////
|
||||
// Unary arithmetic operators
|
||||
|
||||
tvec1<T> & operator= (tvec1<T> const & v);
|
||||
GLM_FUNC_DECL tvec1<T> & operator= (tvec1<T> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator= (tvec1<U> const & v);
|
||||
|
||||
tvec1<T> & operator+=(value_type const & s);
|
||||
tvec1<T> & operator+=(tvec1<T> const & v);
|
||||
tvec1<T> & operator-=(value_type const & s);
|
||||
tvec1<T> & operator-=(tvec1<T> const & v);
|
||||
tvec1<T> & operator*=(value_type const & s);
|
||||
tvec1<T> & operator*=(tvec1<T> const & v);
|
||||
tvec1<T> & operator/=(value_type const & s);
|
||||
tvec1<T> & operator/=(tvec1<T> const & v);
|
||||
tvec1<T> & operator++();
|
||||
tvec1<T> & operator--();
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator+=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator+=(tvec1<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator-=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator-=(tvec1<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator*=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator*=(tvec1<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator/=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator/=(tvec1<U> const & v);
|
||||
GLM_FUNC_DECL tvec1<T> & operator++();
|
||||
GLM_FUNC_DECL tvec1<T> & operator--();
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary bit operators
|
||||
//////////////////////////////////////
|
||||
// Unary bit operators
|
||||
|
||||
tvec1<T> & operator%=(value_type const & s);
|
||||
tvec1<T> & operator%=(tvec1<T> const & v);
|
||||
tvec1<T> & operator&=(value_type const & s);
|
||||
tvec1<T> & operator&=(tvec1<T> const & v);
|
||||
tvec1<T> & operator|=(value_type const & s);
|
||||
tvec1<T> & operator|=(tvec1<T> const & v);
|
||||
tvec1<T> & operator^=(value_type const & s);
|
||||
tvec1<T> & operator^=(tvec1<T> const & v);
|
||||
tvec1<T> & operator<<=(value_type const & s);
|
||||
tvec1<T> & operator<<=(tvec1<T> const & v);
|
||||
tvec1<T> & operator>>=(value_type const & s);
|
||||
tvec1<T> & operator>>=(tvec1<T> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator%=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator%=(tvec1<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator&=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator&=(tvec1<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator|=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator|=(tvec1<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator^=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator^=(tvec1<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator<<=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator<<=(tvec1<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator>>=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec1<T> & operator>>=(tvec1<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle operators
|
||||
//////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
value_type swizzle(comp X) const;
|
||||
tvec2<T> swizzle(comp X, comp Y) const;
|
||||
tvec3<T> swizzle(comp X, comp Y, comp Z) const;
|
||||
tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
|
||||
tref1<T> swizzle(comp X);
|
||||
};
|
||||
GLM_FUNC_DECL value_type swizzle(comp X) const;
|
||||
GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
|
||||
GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
|
||||
GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
|
||||
GLM_FUNC_DECL tref1<T> swizzle(comp X);
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct tref1
|
||||
{
|
||||
tref1(T & x);
|
||||
tref1(tref1<T> const & r);
|
||||
tref1(tvec1<T> const & v);
|
||||
template <typename T>
|
||||
struct tref1
|
||||
{
|
||||
GLM_FUNC_DECL tref1(T & x);
|
||||
GLM_FUNC_DECL tref1(tref1<T> const & r);
|
||||
GLM_FUNC_DECL tref1(tvec1<T> const & v);
|
||||
|
||||
tref1<T> & operator= (tref1<T> const & r);
|
||||
tref1<T> & operator= (tvec1<T> const & v);
|
||||
GLM_FUNC_DECL tref1<T> & operator= (tref1<T> const & r);
|
||||
GLM_FUNC_DECL tref1<T> & operator= (tvec1<T> const & v);
|
||||
|
||||
T& x;
|
||||
};
|
||||
T& x;
|
||||
};
|
||||
|
||||
GLM_DETAIL_IS_VECTOR(tvec1);
|
||||
GLM_DETAIL_IS_VECTOR(tvec1);
|
||||
|
||||
typedef detail::tvec1<core::type::precision::highp_float> highp_vec1_t;
|
||||
typedef detail::tvec1<core::type::precision::mediump_float> mediump_vec1_t;
|
||||
typedef detail::tvec1<core::type::precision::lowp_float> lowp_vec1_t;
|
||||
typedef detail::tvec1<core::type::precision::highp_int> highp_ivec1_t;
|
||||
typedef detail::tvec1<core::type::precision::mediump_int> mediump_ivec1_t;
|
||||
typedef detail::tvec1<core::type::precision::lowp_int> lowp_ivec1_t;
|
||||
typedef detail::tvec1<core::type::precision::highp_uint> highp_uvec1_t;
|
||||
typedef detail::tvec1<core::type::precision::mediump_uint> mediump_uvec1_t;
|
||||
typedef detail::tvec1<core::type::precision::lowp_uint> lowp_uvec1_t;
|
||||
typedef detail::tvec1<highp_float> highp_vec1_t;
|
||||
typedef detail::tvec1<mediump_float> mediump_vec1_t;
|
||||
typedef detail::tvec1<lowp_float> lowp_vec1_t;
|
||||
typedef detail::tvec1<highp_int> highp_ivec1_t;
|
||||
typedef detail::tvec1<mediump_int> mediump_ivec1_t;
|
||||
typedef detail::tvec1<lowp_int> lowp_ivec1_t;
|
||||
typedef detail::tvec1<highp_uint> highp_uvec1_t;
|
||||
typedef detail::tvec1<mediump_uint> mediump_uvec1_t;
|
||||
typedef detail::tvec1<lowp_uint> lowp_uvec1_t;
|
||||
|
||||
} //namespace detail
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_vec1.inl"
|
||||
#endif
|
||||
#endif//GLM_EXTERNAL_TEMPLATE
|
||||
|
||||
#endif//glm_core_type_gentype1
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,11 +1,30 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-18
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_tvec2.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type_vec2.hpp
|
||||
/// @date 2008-08-18 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_gentype2
|
||||
#define glm_core_type_gentype2
|
||||
@@ -16,250 +35,283 @@
|
||||
#include "type_size.hpp"
|
||||
#include "_swizzle.hpp"
|
||||
|
||||
namespace glm
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
void main_vec2();
|
||||
}
|
||||
//namespace test
|
||||
template <typename T> struct tref2;
|
||||
template <typename T> struct tref3;
|
||||
template <typename T> struct tref4;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
|
||||
namespace detail
|
||||
template <typename T>
|
||||
struct tvec2
|
||||
{
|
||||
template <typename T> struct tref2;
|
||||
template <typename T> struct tref3;
|
||||
template <typename T> struct tref4;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
enum ctor{null};
|
||||
|
||||
//! The basic 2D vector type.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tvec2
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec2<T> type;
|
||||
typedef tvec2<bool> bool_type;
|
||||
|
||||
GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Data
|
||||
|
||||
# if(GLM_COMPONENT == GLM_COMPONENT_CXX11)
|
||||
union
|
||||
{
|
||||
enum ctor{null};
|
||||
# if(defined(GLM_SWIZZLE))
|
||||
_GLM_SWIZZLE2_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, x, y)
|
||||
_GLM_SWIZZLE2_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, r, g)
|
||||
_GLM_SWIZZLE2_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, s, t)
|
||||
_GLM_SWIZZLE2_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, x, y)
|
||||
_GLM_SWIZZLE2_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, r, g)
|
||||
_GLM_SWIZZLE2_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, s, t)
|
||||
_GLM_SWIZZLE2_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, x, y)
|
||||
_GLM_SWIZZLE2_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, r, g)
|
||||
_GLM_SWIZZLE2_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, s, t)
|
||||
# endif//(defined(GLM_SWIZZLE))
|
||||
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
static size_type value_size();
|
||||
|
||||
typedef tvec2<T> type;
|
||||
typedef tvec2<bool> bool_type;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Data
|
||||
|
||||
# if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
|
||||
value_type x, y;
|
||||
# elif(GLM_COMPONENT == GLM_COMPONENT_MS_EXT)
|
||||
union
|
||||
{
|
||||
struct{value_type x, y;};
|
||||
struct{value_type r, g;};
|
||||
struct{value_type s, t;};
|
||||
};
|
||||
# else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
|
||||
union {value_type x, r, s;};
|
||||
union {value_type y, g, t;};
|
||||
# endif//GLM_COMPONENT
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
value_type & operator[](size_type i);
|
||||
value_type const & operator[](size_type i) const;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
|
||||
tvec2();
|
||||
tvec2(tvec2<T> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
|
||||
explicit tvec2(
|
||||
ctor);
|
||||
explicit tvec2(
|
||||
value_type const & s);
|
||||
explicit tvec2(
|
||||
value_type const & s1,
|
||||
value_type const & s2);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle constructors
|
||||
|
||||
tvec2(tref2<T> const & r);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion scalar constructors
|
||||
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec2(
|
||||
U const & x);
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U, typename V>
|
||||
explicit tvec2(
|
||||
U const & x,
|
||||
V const & y);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion vector constructors
|
||||
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec2(tvec2<U> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec2(tvec3<U> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec2(tvec4<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary arithmetic operators
|
||||
|
||||
tvec2<T> & operator= (tvec2<T> const & v);
|
||||
template <typename U>
|
||||
tvec2<T> & operator= (tvec2<U> const & v);
|
||||
|
||||
template <typename U>
|
||||
tvec2<T> & operator+=(U const & s);
|
||||
template <typename U>
|
||||
tvec2<T> & operator+=(tvec2<U> const & v);
|
||||
template <typename U>
|
||||
tvec2<T> & operator-=(U const & s);
|
||||
template <typename U>
|
||||
tvec2<T> & operator-=(tvec2<U> const & v);
|
||||
template <typename U>
|
||||
tvec2<T> & operator*=(U const & s);
|
||||
template <typename U>
|
||||
tvec2<T> & operator*=(tvec2<U> const & v);
|
||||
template <typename U>
|
||||
tvec2<T> & operator/=(U const & s);
|
||||
template <typename U>
|
||||
tvec2<T> & operator/=(tvec2<U> const & v);
|
||||
tvec2<T> & operator++();
|
||||
tvec2<T> & operator--();
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary bit operators
|
||||
|
||||
template <typename U>
|
||||
tvec2<T> & operator%= (U const & s);
|
||||
template <typename U>
|
||||
tvec2<T> & operator%= (tvec2<U> const & v);
|
||||
template <typename U>
|
||||
tvec2<T> & operator&= (U const & s);
|
||||
template <typename U>
|
||||
tvec2<T> & operator&= (tvec2<U> const & v);
|
||||
template <typename U>
|
||||
tvec2<T> & operator|= (U const & s);
|
||||
template <typename U>
|
||||
tvec2<T> & operator|= (tvec2<U> const & v);
|
||||
template <typename U>
|
||||
tvec2<T> & operator^= (U const & s);
|
||||
template <typename U>
|
||||
tvec2<T> & operator^= (tvec2<U> const & v);
|
||||
template <typename U>
|
||||
tvec2<T> & operator<<=(U const & s);
|
||||
template <typename U>
|
||||
tvec2<T> & operator<<=(tvec2<U> const & v);
|
||||
template <typename U>
|
||||
tvec2<T> & operator>>=(U const & s);
|
||||
template <typename U>
|
||||
tvec2<T> & operator>>=(tvec2<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
value_type swizzle(comp X) const;
|
||||
tvec2<T> swizzle(comp X, comp Y) const;
|
||||
tvec3<T> swizzle(comp X, comp Y, comp Z) const;
|
||||
tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
|
||||
tref2<T> swizzle(comp X, comp Y);
|
||||
struct{value_type r, g;};
|
||||
struct{value_type s, t;};
|
||||
struct{value_type x, y;};
|
||||
};
|
||||
# elif(GLM_COMPONENT == GLM_COMPONENT_CXX98)
|
||||
union {value_type x, r, s;};
|
||||
union {value_type y, g, t;};
|
||||
|
||||
template <typename T>
|
||||
struct tref2
|
||||
# if(defined(GLM_SWIZZLE))
|
||||
// Defines all he swizzle operator as functions
|
||||
GLM_SWIZZLE_GEN_REF_FROM_VEC2(value_type, detail::tvec2, detail::tref2)
|
||||
GLM_SWIZZLE_GEN_VEC_FROM_VEC2(value_type, detail::tvec2, detail::tvec2, detail::tvec3, detail::tvec4)
|
||||
# endif//(defined(GLM_SWIZZLE))
|
||||
# else //(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
|
||||
value_type x, y;
|
||||
|
||||
# if(defined(GLM_SWIZZLE))
|
||||
// Defines all he swizzle operator as functions
|
||||
GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(value_type, detail::tvec2, detail::tref2, x, y)
|
||||
GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(value_type, detail::tvec2, detail::tvec2, detail::tvec3, detail::tvec4, x, y)
|
||||
# endif//(defined(GLM_SWIZZLE))
|
||||
# endif//GLM_COMPONENT
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
GLM_FUNC_DECL value_type & operator[](size_type i);
|
||||
GLM_FUNC_DECL value_type const & operator[](size_type i) const;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
|
||||
GLM_FUNC_DECL tvec2();
|
||||
GLM_FUNC_DECL tvec2(tvec2<T> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
|
||||
GLM_FUNC_DECL explicit tvec2(
|
||||
ctor);
|
||||
GLM_FUNC_DECL explicit tvec2(
|
||||
value_type const & s);
|
||||
GLM_FUNC_DECL explicit tvec2(
|
||||
value_type const & s1,
|
||||
value_type const & s2);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle constructors
|
||||
|
||||
tvec2(tref2<T> const & r);
|
||||
|
||||
template <int E0, int E1>
|
||||
GLM_FUNC_DECL tvec2(const glm::detail::swizzle<2,T,tvec2<T>,E0,E1,-1,-2>& that)
|
||||
{
|
||||
tref2(T & x, T & y);
|
||||
tref2(tref2<T> const & r);
|
||||
tref2(tvec2<T> const & v);
|
||||
*this = that();
|
||||
}
|
||||
|
||||
tref2<T> & operator= (tref2<T> const & r);
|
||||
tref2<T> & operator= (tvec2<T> const & v);
|
||||
//////////////////////////////////////
|
||||
// Convertion constructors
|
||||
|
||||
T& x;
|
||||
T& y;
|
||||
};
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tvec2(
|
||||
U const & x);
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U, typename V>
|
||||
GLM_FUNC_DECL explicit tvec2(
|
||||
U const & x,
|
||||
V const & y);
|
||||
|
||||
GLM_DETAIL_IS_VECTOR(tvec2);
|
||||
//////////////////////////////////////
|
||||
// Convertion vector constructors
|
||||
|
||||
} //namespace detail
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tvec2(tvec2<U> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tvec2(tvec3<U> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tvec2(tvec4<U> const & v);
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
//////////////////////////////////////
|
||||
// Unary arithmetic operators
|
||||
|
||||
namespace precision
|
||||
GLM_FUNC_DECL tvec2<T> & operator= (tvec2<T> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator= (tvec2<U> const & v);
|
||||
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator+=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator+=(tvec2<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator-=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator-=(tvec2<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator*=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator*=(tvec2<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator/=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator/=(tvec2<U> const & v);
|
||||
GLM_FUNC_DECL tvec2<T> & operator++();
|
||||
GLM_FUNC_DECL tvec2<T> & operator--();
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary bit operators
|
||||
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator%= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator%= (tvec2<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator&= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator&= (tvec2<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator|= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator|= (tvec2<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator^= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator^= (tvec2<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator<<=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator<<=(tvec2<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator>>=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec2<T> & operator>>=(tvec2<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
GLM_FUNC_DECL value_type swizzle(comp X) const;
|
||||
GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
|
||||
GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
|
||||
GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
|
||||
GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct tref2
|
||||
{
|
||||
//! 2 components vector of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec2<highp_float> highp_vec2;
|
||||
//! 2 components vector of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec2<mediump_float> mediump_vec2;
|
||||
//! 2 components vector of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec2<lowp_float> lowp_vec2;
|
||||
GLM_FUNC_DECL tref2(T & x, T & y);
|
||||
GLM_FUNC_DECL tref2(tref2<T> const & r);
|
||||
GLM_FUNC_DECL explicit tref2(tvec2<T> const & v);
|
||||
|
||||
//! 2 components vector of high precision signed integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec2<highp_int> highp_ivec2;
|
||||
//! 2 components vector of medium precision signed integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec2<mediump_int> mediump_ivec2;
|
||||
//! 2 components vector of low precision signed integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec2<lowp_int> lowp_ivec2;
|
||||
GLM_FUNC_DECL tref2<T> & operator= (tref2<T> const & r);
|
||||
GLM_FUNC_DECL tref2<T> & operator= (tvec2<T> const & v);
|
||||
|
||||
GLM_FUNC_DECL tvec2<T> operator() ();
|
||||
|
||||
T & x;
|
||||
T & y;
|
||||
};
|
||||
|
||||
GLM_DETAIL_IS_VECTOR(tvec2);
|
||||
|
||||
} //namespace detail
|
||||
|
||||
/// @addtogroup core_precision
|
||||
/// @{
|
||||
|
||||
/// 2 components vector of high precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec2<highp_float> highp_vec2;
|
||||
|
||||
/// 2 components vector of medium precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec2<mediump_float> mediump_vec2;
|
||||
|
||||
/// 2 components vector of low precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec2<lowp_float> lowp_vec2;
|
||||
|
||||
/// 2 components vector of high precision signed integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec2<highp_int> highp_ivec2;
|
||||
|
||||
/// 2 components vector of medium precision signed integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec2<mediump_int> mediump_ivec2;
|
||||
|
||||
/// 2 components vector of low precision signed integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec2<lowp_int> lowp_ivec2;
|
||||
|
||||
//! 2 components vector of high precision unsigned integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec2<highp_uint> highp_uvec2;
|
||||
//! 2 components vector of medium precision unsigned integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec2<mediump_uint> mediump_uvec2;
|
||||
//! 2 components vector of low precision unsigned integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec2<lowp_uint> lowp_uvec2;
|
||||
}
|
||||
//namespace precision
|
||||
/// 2 components vector of high precision unsigned integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec2<highp_uint> highp_uvec2;
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
/// 2 components vector of medium precision unsigned integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec2<mediump_uint> mediump_uvec2;
|
||||
|
||||
/// 2 components vector of low precision unsigned integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec2<lowp_uint> lowp_uvec2;
|
||||
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_vec2.inl"
|
||||
#endif
|
||||
#endif//GLM_EXTERNAL_TEMPLATE
|
||||
|
||||
#endif//glm_core_type_gentype2
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,11 +1,30 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-22
|
||||
// Updated : 2010-02-03
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_tvec3.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type_vec3.hpp
|
||||
/// @date 2008-08-22 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_gentype3
|
||||
#define glm_core_type_gentype3
|
||||
@@ -16,255 +35,308 @@
|
||||
#include "type_size.hpp"
|
||||
#include "_swizzle.hpp"
|
||||
|
||||
namespace glm
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
void main_vec3();
|
||||
}//namespace test
|
||||
template <typename T> struct tref2;
|
||||
template <typename T> struct tref3;
|
||||
template <typename T> struct tref4;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec4;
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T> struct tref2;
|
||||
template <typename T> struct tref3;
|
||||
template <typename T> struct tref4;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec4;
|
||||
template <typename T>
|
||||
struct tvec3
|
||||
{
|
||||
enum ctor{null};
|
||||
|
||||
//! Basic 3D vector type.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tvec3
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec3<T> type;
|
||||
typedef tvec3<bool> bool_type;
|
||||
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
static size_type value_size();
|
||||
GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
|
||||
|
||||
typedef tvec3<T> type;
|
||||
typedef tvec3<bool> bool_type;
|
||||
//////////////////////////////////////
|
||||
// Data
|
||||
|
||||
//////////////////////////////////////
|
||||
// Data
|
||||
|
||||
# if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
|
||||
value_type x, y, z;
|
||||
# elif(GLM_COMPONENT == GLM_COMPONENT_MS_EXT)
|
||||
union
|
||||
{
|
||||
struct{value_type x, y, z;};
|
||||
struct{value_type r, g, b;};
|
||||
struct{value_type s, t, p;};
|
||||
};
|
||||
# else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
|
||||
union {value_type x, r, s;};
|
||||
union {value_type y, g, t;};
|
||||
union {value_type z, b, p;};
|
||||
# endif//GLM_COMPONENT
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
value_type & operator[](size_type i);
|
||||
value_type const & operator[](size_type i) const;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
|
||||
tvec3();
|
||||
tvec3(tvec3<T> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
|
||||
explicit tvec3(
|
||||
ctor);
|
||||
explicit tvec3(
|
||||
value_type const & s);
|
||||
explicit tvec3(
|
||||
value_type const & s1,
|
||||
value_type const & s2,
|
||||
value_type const & s3);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle constructors
|
||||
|
||||
tvec3(tref3<T> const & r);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion scalar constructors
|
||||
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec3(
|
||||
U const & x);
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U, typename V, typename W>
|
||||
explicit tvec3(
|
||||
U const & x,
|
||||
V const & y,
|
||||
W const & z);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion vector constructors
|
||||
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
explicit tvec3(tvec2<A> const & v, B const & s);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
explicit tvec3(A const & s, tvec2<B> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec3(tvec3<U> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec3(tvec4<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary arithmetic operators
|
||||
|
||||
tvec3<T> & operator= (tvec3<T> const & v);
|
||||
template <typename U>
|
||||
tvec3<T> & operator= (tvec3<U> const & v);
|
||||
|
||||
template <typename U>
|
||||
tvec3<T> & operator+=(U const & s);
|
||||
template <typename U>
|
||||
tvec3<T> & operator+=(tvec3<U> const & v);
|
||||
template <typename U>
|
||||
tvec3<T> & operator-=(U const & s);
|
||||
template <typename U>
|
||||
tvec3<T> & operator-=(tvec3<U> const & v);
|
||||
template <typename U>
|
||||
tvec3<T> & operator*=(U const & s);
|
||||
template <typename U>
|
||||
tvec3<T> & operator*=(tvec3<U> const & v);
|
||||
template <typename U>
|
||||
tvec3<T> & operator/=(U const & s);
|
||||
template <typename U>
|
||||
tvec3<T> & operator/=(tvec3<U> const & v);
|
||||
tvec3<T> & operator++();
|
||||
tvec3<T> & operator--();
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary bit operators
|
||||
|
||||
template <typename U>
|
||||
tvec3<T> & operator%= (U const & s);
|
||||
template <typename U>
|
||||
tvec3<T> & operator%= (tvec3<U> const & v);
|
||||
template <typename U>
|
||||
tvec3<T> & operator&= (U const & s);
|
||||
template <typename U>
|
||||
tvec3<T> & operator&= (tvec3<U> const & v);
|
||||
template <typename U>
|
||||
tvec3<T> & operator|= (U const & s);
|
||||
template <typename U>
|
||||
tvec3<T> & operator|= (tvec3<U> const & v);
|
||||
template <typename U>
|
||||
tvec3<T> & operator^= (U const & s);
|
||||
template <typename U>
|
||||
tvec3<T> & operator^= (tvec3<U> const & v);
|
||||
template <typename U>
|
||||
tvec3<T> & operator<<=(U const & s);
|
||||
template <typename U>
|
||||
tvec3<T> & operator<<=(tvec3<U> const & v);
|
||||
template <typename U>
|
||||
tvec3<T> & operator>>=(U const & s);
|
||||
template <typename U>
|
||||
tvec3<T> & operator>>=(tvec3<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
value_type swizzle(comp X) const;
|
||||
tvec2<T> swizzle(comp X, comp Y) const;
|
||||
tvec3<T> swizzle(comp X, comp Y, comp Z) const;
|
||||
tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
|
||||
tref3<T> swizzle(comp X, comp Y, comp Z);
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct tref3
|
||||
# if(GLM_COMPONENT == GLM_COMPONENT_CXX11)
|
||||
union
|
||||
{
|
||||
tref3(T & x, T & y, T & z);
|
||||
tref3(tref3<T> const & r);
|
||||
tref3(tvec3<T> const & v);
|
||||
# if(defined(GLM_SWIZZLE))
|
||||
_GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, x, y, z)
|
||||
_GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, r, g, b)
|
||||
_GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, s, t, p)
|
||||
_GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, x, y, z)
|
||||
_GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, r, g, b)
|
||||
_GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, s, t, p)
|
||||
_GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, x, y, z)
|
||||
_GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, r, g, b)
|
||||
_GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, s, t, p)
|
||||
# endif//(defined(GLM_SWIZZLE))
|
||||
|
||||
tref3<T> & operator= (tref3<T> const & r);
|
||||
tref3<T> & operator= (tvec3<T> const & v);
|
||||
|
||||
T & x;
|
||||
T & y;
|
||||
T & z;
|
||||
struct{value_type r, g, b;};
|
||||
struct{value_type s, t, p;};
|
||||
struct{value_type x, y, z;};
|
||||
};
|
||||
# elif(GLM_COMPONENT == GLM_COMPONENT_CXX98)
|
||||
union {value_type x, r, s;};
|
||||
union {value_type y, g, t;};
|
||||
union {value_type z, b, p;};
|
||||
|
||||
GLM_DETAIL_IS_VECTOR(tvec3);
|
||||
} //namespace detail
|
||||
# if(defined(GLM_SWIZZLE))
|
||||
// Defines all he swizzle operator as functions
|
||||
GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, detail::tvec3, detail::tref2, detail::tref3)
|
||||
GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, detail::tvec3, detail::tvec2, detail::tvec3, detail::tvec4)
|
||||
# endif//(defined(GLM_SWIZZLE))
|
||||
# else //(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
|
||||
value_type x, y, z;
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
# if(defined(GLM_SWIZZLE))
|
||||
// Defines all he swizzle operator as functions
|
||||
GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, detail::tvec3, detail::tref2, detail::tref3, x, y, z)
|
||||
GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, detail::tvec3, detail::tvec2, detail::tvec3, detail::tvec4, x, y, z)
|
||||
# endif//(defined(GLM_SWIZZLE))
|
||||
# endif//GLM_COMPONENT
|
||||
|
||||
namespace precision
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
GLM_FUNC_DECL value_type & operator[](size_type i);
|
||||
GLM_FUNC_DECL value_type const & operator[](size_type i) const;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
|
||||
GLM_FUNC_DECL tvec3();
|
||||
GLM_FUNC_DECL tvec3(tvec3<T> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
|
||||
GLM_FUNC_DECL explicit tvec3(
|
||||
ctor);
|
||||
GLM_FUNC_DECL explicit tvec3(
|
||||
value_type const & s);
|
||||
GLM_FUNC_DECL explicit tvec3(
|
||||
value_type const & s1,
|
||||
value_type const & s2,
|
||||
value_type const & s3);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion scalar constructors
|
||||
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tvec3(
|
||||
U const & x);
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U, typename V, typename W>
|
||||
GLM_FUNC_DECL explicit tvec3(
|
||||
U const & x,
|
||||
V const & y,
|
||||
W const & z);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion vector constructors
|
||||
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
GLM_FUNC_DECL explicit tvec3(tvec2<A> const & v, B const & s);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
GLM_FUNC_DECL explicit tvec3(A const & s, tvec2<B> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tvec3(tvec3<U> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tvec3(tvec4<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle constructors
|
||||
|
||||
GLM_FUNC_DECL tvec3(tref3<T> const & r);
|
||||
|
||||
template <typename A, typename B>
|
||||
GLM_FUNC_DECL explicit tvec3(tref2<A> const & v, B const & s);
|
||||
|
||||
template <typename A, typename B>
|
||||
GLM_FUNC_DECL explicit tvec3(A const & s, tref2<B> const & v);
|
||||
|
||||
template <int E0, int E1, int E2>
|
||||
GLM_FUNC_DECL tvec3(glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & that)
|
||||
{
|
||||
*this = that();
|
||||
}
|
||||
|
||||
template <int E0, int E1>
|
||||
GLM_FUNC_DECL tvec3(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & s)
|
||||
{
|
||||
*this = tvec3<T>(v(), s);
|
||||
}
|
||||
|
||||
template <int E0, int E1>
|
||||
GLM_FUNC_DECL tvec3(T const & s, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v)
|
||||
{
|
||||
*this = tvec3<T>(s, v());
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary arithmetic operators
|
||||
|
||||
GLM_FUNC_DECL tvec3<T> & operator= (tvec3<T> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator= (tvec3<U> const & v);
|
||||
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator+=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator+=(tvec3<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator-=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator-=(tvec3<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator*=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator*=(tvec3<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator/=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator/=(tvec3<U> const & v);
|
||||
GLM_FUNC_DECL tvec3<T> & operator++();
|
||||
GLM_FUNC_DECL tvec3<T> & operator--();
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary bit operators
|
||||
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator%= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator%= (tvec3<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator&= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator&= (tvec3<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator|= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator|= (tvec3<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator^= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator^= (tvec3<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator<<=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator<<=(tvec3<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator>>=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec3<T> & operator>>=(tvec3<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
GLM_FUNC_DECL value_type swizzle(comp X) const;
|
||||
GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
|
||||
GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
|
||||
GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
|
||||
GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
|
||||
GLM_FUNC_DECL tref3<T> swizzle(comp X, comp Y, comp Z);
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct tref3
|
||||
{
|
||||
//! 3 components vector of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec3<highp_float> highp_vec3;
|
||||
//! 3 components vector of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec3<mediump_float> mediump_vec3;
|
||||
//! 3 components vector of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec3<lowp_float> lowp_vec3;
|
||||
GLM_FUNC_DECL tref3(T & x, T & y, T & z);
|
||||
GLM_FUNC_DECL tref3(tref3<T> const & r);
|
||||
GLM_FUNC_DECL explicit tref3(tvec3<T> const & v);
|
||||
|
||||
//! 3 components vector of high precision signed integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec3<highp_int> highp_ivec3;
|
||||
//! 3 components vector of medium precision signed integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec3<mediump_int> mediump_ivec3;
|
||||
//! 3 components vector of low precision signed integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec3<lowp_int> lowp_ivec3;
|
||||
GLM_FUNC_DECL tref3<T> & operator= (tref3<T> const & r);
|
||||
GLM_FUNC_DECL tref3<T> & operator= (tvec3<T> const & v);
|
||||
|
||||
//! 3 components vector of high precision unsigned integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec3<highp_uint> highp_uvec3;
|
||||
//! 3 components vector of medium precision unsigned integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec3<mediump_uint> mediump_uvec3;
|
||||
//! 3 components vector of low precision unsigned integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec3<lowp_uint> lowp_uvec3;
|
||||
}
|
||||
//namespace precision
|
||||
GLM_FUNC_DECL tvec3<T> operator() ();
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
T & x;
|
||||
T & y;
|
||||
T & z;
|
||||
};
|
||||
|
||||
GLM_DETAIL_IS_VECTOR(tvec3);
|
||||
} //namespace detail
|
||||
|
||||
/// @addtogroup core_precision
|
||||
/// @{
|
||||
|
||||
/// 3 components vector of high precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec3<highp_float> highp_vec3;
|
||||
|
||||
/// 3 components vector of medium precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec3<mediump_float> mediump_vec3;
|
||||
|
||||
/// 3 components vector of low precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec3<lowp_float> lowp_vec3;
|
||||
|
||||
/// 3 components vector of high precision signed integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec3<highp_int> highp_ivec3;
|
||||
|
||||
/// 3 components vector of medium precision signed integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec3<mediump_int> mediump_ivec3;
|
||||
|
||||
/// 3 components vector of low precision signed integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec3<lowp_int> lowp_ivec3;
|
||||
|
||||
/// 3 components vector of high precision unsigned integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec3<highp_uint> highp_uvec3;
|
||||
|
||||
/// 3 components vector of medium precision unsigned integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec3<mediump_uint> mediump_uvec3;
|
||||
|
||||
/// 3 components vector of low precision unsigned integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec3<lowp_uint> lowp_uvec3;
|
||||
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_vec3.inl"
|
||||
#endif
|
||||
#endif//GLM_EXTERNAL_TEMPLATE
|
||||
|
||||
#endif//glm_core_type_gentype3
|
||||
|
||||
+1117
-1057
File diff suppressed because it is too large
Load Diff
@@ -1,11 +1,30 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-22
|
||||
// Updated : 2010-02-03
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_tvec4.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/core/type_vec4.hpp
|
||||
/// @date 2008-08-22 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_gentype4
|
||||
#define glm_core_type_gentype4
|
||||
@@ -15,276 +34,366 @@
|
||||
#include "type_int.hpp"
|
||||
#include "type_size.hpp"
|
||||
#include "_swizzle.hpp"
|
||||
#include "_detail.hpp"
|
||||
|
||||
namespace glm
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
void main_vec4();
|
||||
}//namespace test
|
||||
template <typename T> struct tref2;
|
||||
template <typename T> struct tref3;
|
||||
template <typename T> struct tref4;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
|
||||
namespace detail
|
||||
template <typename T>
|
||||
struct tvec4
|
||||
{
|
||||
template <typename T> struct tref2;
|
||||
template <typename T> struct tref3;
|
||||
template <typename T> struct tref4;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
enum ctor{null};
|
||||
|
||||
///Basic 4D vector type.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tvec4
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec4<T> type;
|
||||
typedef tvec4<bool> bool_type;
|
||||
|
||||
GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Data
|
||||
|
||||
# if(GLM_COMPONENT == GLM_COMPONENT_CXX11)
|
||||
union
|
||||
{
|
||||
enum ctor{null};
|
||||
# if(defined(GLM_SWIZZLE))
|
||||
_GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, x, y, z, w)
|
||||
_GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, r, g, b, a)
|
||||
_GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, s, t, p, q)
|
||||
_GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, x, y, z, w)
|
||||
_GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, r, g, b, a)
|
||||
_GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, s, t, p, q)
|
||||
_GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, x, y, z, w)
|
||||
_GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, r, g, b, a)
|
||||
_GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, s, t, p, q)
|
||||
# endif//(defined(GLM_SWIZZLE))
|
||||
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
static size_type value_size();
|
||||
|
||||
typedef tvec4<T> type;
|
||||
typedef tvec4<bool> bool_type;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Data
|
||||
|
||||
# if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
|
||||
value_type x, y, z, w;
|
||||
# elif(GLM_COMPONENT == GLM_COMPONENT_MS_EXT)
|
||||
union
|
||||
{
|
||||
struct{value_type x, y, z, w;};
|
||||
struct{value_type r, g, b, a;};
|
||||
struct{value_type s, t, p, q;};
|
||||
};
|
||||
# else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
|
||||
union {value_type x, r, s;};
|
||||
union {value_type y, g, t;};
|
||||
union {value_type z, b, p;};
|
||||
union {value_type w, a, q;};
|
||||
# endif//GLM_COMPONENT
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
value_type & operator[](size_type i);
|
||||
value_type const & operator[](size_type i) const;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
|
||||
tvec4();
|
||||
tvec4(type const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
|
||||
explicit tvec4(
|
||||
ctor);
|
||||
explicit tvec4(
|
||||
value_type const & s);
|
||||
explicit tvec4(
|
||||
value_type const & s0,
|
||||
value_type const & s1,
|
||||
value_type const & s2,
|
||||
value_type const & s3);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle constructors
|
||||
|
||||
tvec4(tref4<T> const & r);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion scalar constructors
|
||||
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec4(
|
||||
U const & x);
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C, typename D>
|
||||
explicit tvec4(
|
||||
A const & x,
|
||||
B const & y,
|
||||
C const & z,
|
||||
D const & w);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion vector constructors
|
||||
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C>
|
||||
explicit tvec4(tvec2<A> const & v, B const & s1, C const & s2);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C>
|
||||
explicit tvec4(A const & s1, tvec2<B> const & v, C const & s2);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C>
|
||||
explicit tvec4(A const & s1, B const & s2, tvec2<C> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
explicit tvec4(tvec3<A> const & v, B const & s);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
explicit tvec4(A const & s, tvec3<B> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
explicit tvec4(tvec2<A> const & v1, tvec2<B> const & v2);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec4(tvec4<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary arithmetic operators
|
||||
|
||||
tvec4<T> & operator= (tvec4<T> const & v);
|
||||
template <typename U>
|
||||
tvec4<T> & operator= (tvec4<U> const & v);
|
||||
|
||||
template <typename U>
|
||||
tvec4<T> & operator+=(U const & s);
|
||||
template <typename U>
|
||||
tvec4<T> & operator+=(tvec4<U> const & v);
|
||||
template <typename U>
|
||||
tvec4<T> & operator-=(U const & s);
|
||||
template <typename U>
|
||||
tvec4<T> & operator-=(tvec4<U> const & v);
|
||||
template <typename U>
|
||||
tvec4<T> & operator*=(U const & s);
|
||||
template <typename U>
|
||||
tvec4<T> & operator*=(tvec4<U> const & v);
|
||||
template <typename U>
|
||||
tvec4<T> & operator/=(U const & s);
|
||||
template <typename U>
|
||||
tvec4<T> & operator/=(tvec4<U> const & v);
|
||||
tvec4<T> & operator++();
|
||||
tvec4<T> & operator--();
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary bit operators
|
||||
|
||||
template <typename U>
|
||||
tvec4<T> & operator%= (U const & s);
|
||||
template <typename U>
|
||||
tvec4<T> & operator%= (tvec4<U> const & v);
|
||||
template <typename U>
|
||||
tvec4<T> & operator&= (U const & s);
|
||||
template <typename U>
|
||||
tvec4<T> & operator&= (tvec4<U> const & v);
|
||||
template <typename U>
|
||||
tvec4<T> & operator|= (U const & s);
|
||||
template <typename U>
|
||||
tvec4<T> & operator|= (tvec4<U> const & v);
|
||||
template <typename U>
|
||||
tvec4<T> & operator^= (U const & s);
|
||||
template <typename U>
|
||||
tvec4<T> & operator^= (tvec4<U> const & v);
|
||||
template <typename U>
|
||||
tvec4<T> & operator<<=(U const & s);
|
||||
template <typename U>
|
||||
tvec4<T> & operator<<=(tvec4<U> const & v);
|
||||
template <typename U>
|
||||
tvec4<T> & operator>>=(U const & s);
|
||||
template <typename U>
|
||||
tvec4<T> & operator>>=(tvec4<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
value_type swizzle(comp X) const;
|
||||
tvec2<T> swizzle(comp X, comp Y) const;
|
||||
tvec3<T> swizzle(comp X, comp Y, comp Z) const;
|
||||
tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
|
||||
tref4<T> swizzle(comp X, comp Y, comp Z, comp W);
|
||||
struct{value_type r, g, b, a;};
|
||||
struct{value_type s, t, p, q;};
|
||||
struct{value_type x, y, z, w;};
|
||||
};
|
||||
# elif(GLM_COMPONENT == GLM_COMPONENT_CXX98)
|
||||
union {value_type x, r, s;};
|
||||
union {value_type y, g, t;};
|
||||
union {value_type z, b, p;};
|
||||
union {value_type w, a, q;};
|
||||
|
||||
template <typename T>
|
||||
struct tref4
|
||||
# if(defined(GLM_SWIZZLE))
|
||||
// Defines all he swizzle operator as functions
|
||||
GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, detail::tvec4, detail::tref2, detail::tref3, detail::tref4)
|
||||
GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, detail::tvec4, detail::tvec2, detail::tvec3, detail::tvec4)
|
||||
# endif//(defined(GLM_SWIZZLE))
|
||||
# else //(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
|
||||
value_type x, y, z, w;
|
||||
|
||||
# if(defined(GLM_SWIZZLE))
|
||||
// Defines all he swizzle operator as functions
|
||||
GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, detail::tvec4, detail::tref2, detail::tref3, detail::tref4, x, y, z, w)
|
||||
GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, detail::tvec4, detail::tvec2, detail::tvec3, detail::tvec4, x, y, z, w)
|
||||
# endif//(defined(GLM_SWIZZLE))
|
||||
# endif//GLM_COMPONENT
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
GLM_FUNC_DECL value_type & operator[](size_type i);
|
||||
GLM_FUNC_DECL value_type const & operator[](size_type i) const;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
|
||||
GLM_FUNC_DECL tvec4();
|
||||
GLM_FUNC_DECL tvec4(type const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
|
||||
GLM_FUNC_DECL explicit tvec4(
|
||||
ctor);
|
||||
GLM_FUNC_DECL explicit tvec4(
|
||||
value_type const & s);
|
||||
GLM_FUNC_DECL explicit tvec4(
|
||||
value_type const & s0,
|
||||
value_type const & s1,
|
||||
value_type const & s2,
|
||||
value_type const & s3);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion scalar constructors
|
||||
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tvec4(
|
||||
U const & x);
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C, typename D>
|
||||
GLM_FUNC_DECL explicit tvec4(
|
||||
A const & x,
|
||||
B const & y,
|
||||
C const & z,
|
||||
D const & w);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion vector constructors
|
||||
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C>
|
||||
GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v, B const & s1, C const & s2);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C>
|
||||
GLM_FUNC_DECL explicit tvec4(A const & s1, tvec2<B> const & v, C const & s2);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C>
|
||||
GLM_FUNC_DECL explicit tvec4(A const & s1, B const & s2, tvec2<C> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
GLM_FUNC_DECL explicit tvec4(tvec3<A> const & v, B const & s);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
GLM_FUNC_DECL explicit tvec4(A const & s, tvec3<B> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v1, tvec2<B> const & v2);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tvec4(tvec4<U> const & v);
|
||||
|
||||
template <int E0, int E1, int E2, int E3>
|
||||
GLM_FUNC_DECL tvec4(glm::detail::swizzle<4, T, tvec4<T>, E0, E1, E2, E3> const & that)
|
||||
{
|
||||
tref4(T & x, T & y, T & z, T & w);
|
||||
tref4(tref4<T> const & r);
|
||||
tref4(tvec4<T> const & v);
|
||||
*this = that();
|
||||
}
|
||||
|
||||
tref4<T> & operator= (tref4<T> const & r);
|
||||
tref4<T> & operator= (tvec4<T> const & v);
|
||||
template <int E0, int E1, int F0, int F1>
|
||||
GLM_FUNC_DECL tvec4(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, glm::detail::swizzle<2, T, tvec2<T>, F0, F1, -1, -2> const & u)
|
||||
{
|
||||
*this = tvec4<T>(v(), u());
|
||||
}
|
||||
|
||||
T & x;
|
||||
T & y;
|
||||
T & z;
|
||||
T & w;
|
||||
};
|
||||
template <int E0, int E1>
|
||||
GLM_FUNC_DECL tvec4(T const & x, T const & y, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v)
|
||||
{
|
||||
*this = tvec4<T>(x, y, v());
|
||||
}
|
||||
|
||||
GLM_DETAIL_IS_VECTOR(tvec4);
|
||||
} //namespace detail
|
||||
template <int E0, int E1>
|
||||
GLM_FUNC_DECL tvec4(T const & x, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & w)
|
||||
{
|
||||
*this = tvec4<T>(x, v(), w);
|
||||
}
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
template <int E0, int E1>
|
||||
GLM_FUNC_DECL tvec4(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & z, T const & w)
|
||||
{
|
||||
*this = tvec4<T>(v(), z, w);
|
||||
}
|
||||
|
||||
//////////////////////////
|
||||
// Float definition
|
||||
template <int E0, int E1, int E2>
|
||||
GLM_FUNC_DECL tvec4(glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & v, T const & w)
|
||||
{
|
||||
*this = tvec4<T>(v(), w);
|
||||
}
|
||||
|
||||
namespace precision
|
||||
template <int E0, int E1, int E2>
|
||||
GLM_FUNC_DECL tvec4(T const & x, glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & v)
|
||||
{
|
||||
*this = tvec4<T>(x, v());
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle constructors
|
||||
|
||||
GLM_FUNC_DECL tvec4(tref4<T> const & r);
|
||||
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C>
|
||||
GLM_FUNC_DECL explicit tvec4(tref2<A> const & v, B const & s1, C const & s2);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C>
|
||||
GLM_FUNC_DECL explicit tvec4(A const & s1, tref2<B> const & v, C const & s2);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C>
|
||||
GLM_FUNC_DECL explicit tvec4(A const & s1, B const & s2, tref2<C> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
GLM_FUNC_DECL explicit tvec4(tref3<A> const & v, B const & s);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
GLM_FUNC_DECL explicit tvec4(A const & s, tref3<B> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
GLM_FUNC_DECL explicit tvec4(tref2<A> const & v1, tref2<B> const & v2);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v1, tref2<B> const & v2);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
GLM_FUNC_DECL explicit tvec4(tref2<A> const & v1, tvec2<B> const & v2);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary arithmetic operators
|
||||
|
||||
GLM_FUNC_DECL tvec4<T> & operator= (tvec4<T> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator= (tvec4<U> const & v);
|
||||
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator+=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator+=(tvec4<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator-=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator-=(tvec4<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator*=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator*=(tvec4<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator/=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator/=(tvec4<U> const & v);
|
||||
GLM_FUNC_DECL tvec4<T> & operator++();
|
||||
GLM_FUNC_DECL tvec4<T> & operator--();
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary bit operators
|
||||
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator%= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator%= (tvec4<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator&= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator&= (tvec4<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator|= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator|= (tvec4<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator^= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator^= (tvec4<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator<<=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator<<=(tvec4<U> const & v);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator>>=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tvec4<T> & operator>>=(tvec4<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
GLM_FUNC_DECL value_type swizzle(comp X) const;
|
||||
GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
|
||||
GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
|
||||
GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
|
||||
GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
|
||||
GLM_FUNC_DECL tref3<T> swizzle(comp X, comp Y, comp Z);
|
||||
GLM_FUNC_DECL tref4<T> swizzle(comp X, comp Y, comp Z, comp W);
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct tref4
|
||||
{
|
||||
//! 4 components vector of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec4<highp_float> highp_vec4;
|
||||
//! 4 components vector of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec4<mediump_float> mediump_vec4;
|
||||
//! 4 components vector of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec4<lowp_float> lowp_vec4;
|
||||
GLM_FUNC_DECL tref4(T & x, T & y, T & z, T & w);
|
||||
GLM_FUNC_DECL tref4(tref4<T> const & r);
|
||||
GLM_FUNC_DECL explicit tref4(tvec4<T> const & v);
|
||||
|
||||
//! 4 components vector of high precision signed integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec4<highp_int> highp_ivec4;
|
||||
//! 4 components vector of medium precision signed integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec4<mediump_int> mediump_ivec4;
|
||||
//! 4 components vector of low precision signed integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec4<lowp_int> lowp_ivec4;
|
||||
GLM_FUNC_DECL tref4<T> & operator= (tref4<T> const & r);
|
||||
GLM_FUNC_DECL tref4<T> & operator= (tvec4<T> const & v);
|
||||
|
||||
//! 4 components vector of high precision unsigned integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec4<highp_uint> highp_uvec4;
|
||||
//! 4 components vector of medium precision unsigned integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec4<mediump_uint> mediump_uvec4;
|
||||
//! 4 components vector of low precision unsigned integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tvec4<lowp_uint> lowp_uvec4;
|
||||
}
|
||||
//namespace precision
|
||||
GLM_FUNC_DECL tvec4<T> operator() ();
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
T & x;
|
||||
T & y;
|
||||
T & z;
|
||||
T & w;
|
||||
};
|
||||
|
||||
using namespace core::type;
|
||||
GLM_DETAIL_IS_VECTOR(tvec4);
|
||||
}//namespace detail
|
||||
|
||||
/// @addtogroup core_precision
|
||||
/// @{
|
||||
|
||||
/// 4 components vector of high precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec4<highp_float> highp_vec4;
|
||||
|
||||
/// 4 components vector of medium precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec4<mediump_float> mediump_vec4;
|
||||
|
||||
/// 4 components vector of low precision floating-point numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec4<lowp_float> lowp_vec4;
|
||||
|
||||
/// 4 components vector of high precision signed integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec4<highp_int> highp_ivec4;
|
||||
|
||||
/// 4 components vector of medium precision signed integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec4<mediump_int> mediump_ivec4;
|
||||
|
||||
/// 4 components vector of low precision signed integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec4<lowp_int> lowp_ivec4;
|
||||
|
||||
/// 4 components vector of high precision unsigned integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec4<highp_uint> highp_uvec4;
|
||||
|
||||
/// 4 components vector of medium precision unsigned integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec4<mediump_uint> mediump_uvec4;
|
||||
|
||||
/// 4 components vector of low precision unsigned integer numbers.
|
||||
/// There is no guarantee on the actual precision.
|
||||
///
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
|
||||
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||
typedef detail::tvec4<lowp_uint> lowp_uvec4;
|
||||
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_vec4.inl"
|
||||
#endif
|
||||
#endif//GLM_EXTERNAL_TEMPLATE
|
||||
|
||||
#endif//glm_core_type_gentype4
|
||||
|
||||
+1343
-1186
File diff suppressed because it is too large
Load Diff
@@ -1,94 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-05-01
|
||||
// Updated : 2010-12-13
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/ext.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_ext
|
||||
#define glm_ext
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED))
|
||||
# define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED
|
||||
# pragma message("GLM: All extensions included (not recommanded)")
|
||||
#endif//GLM_MESSAGES
|
||||
|
||||
#include "./gtc/half_float.hpp"
|
||||
#include "./gtc/matrix_access.hpp"
|
||||
#include "./gtc/matrix_integer.hpp"
|
||||
#include "./gtc/matrix_inverse.hpp"
|
||||
#include "./gtc/matrix_transform.hpp"
|
||||
#include "./gtc/quaternion.hpp"
|
||||
#include "./gtc/swizzle.hpp"
|
||||
#include "./gtc/type_precision.hpp"
|
||||
#include "./gtc/type_ptr.hpp"
|
||||
|
||||
#include "./gtx/associated_min_max.hpp"
|
||||
#include "./gtx/bit.hpp"
|
||||
#include "./gtx/closest_point.hpp"
|
||||
#include "./gtx/color_cast.hpp"
|
||||
#include "./gtx/color_space.hpp"
|
||||
#include "./gtx/color_space_YCoCg.hpp"
|
||||
#include "./gtx/compatibility.hpp"
|
||||
#include "./gtx/component_wise.hpp"
|
||||
#include "./gtx/epsilon.hpp"
|
||||
#include "./gtx/euler_angles.hpp"
|
||||
#include "./gtx/extend.hpp"
|
||||
#include "./gtx/extented_min_max.hpp"
|
||||
#include "./gtx/fast_exponential.hpp"
|
||||
#include "./gtx/fast_square_root.hpp"
|
||||
#include "./gtx/fast_trigonometry.hpp"
|
||||
#include "./gtx/gradient_paint.hpp"
|
||||
#include "./gtx/handed_coordinate_space.hpp"
|
||||
#include "./gtx/inertia.hpp"
|
||||
#include "./gtx/int_10_10_10_2.hpp"
|
||||
#include "./gtx/integer.hpp"
|
||||
#include "./gtx/intersect.hpp"
|
||||
#include "./gtx/log_base.hpp"
|
||||
#include "./gtx/matrix_cross_product.hpp"
|
||||
#include "./gtx/matrix_major_storage.hpp"
|
||||
#include "./gtx/matrix_operation.hpp"
|
||||
#include "./gtx/matrix_query.hpp"
|
||||
#include "./gtx/mixed_product.hpp"
|
||||
#include "./gtx/multiple.hpp"
|
||||
#include "./gtx/norm.hpp"
|
||||
#include "./gtx/normal.hpp"
|
||||
#include "./gtx/normalize_dot.hpp"
|
||||
#include "./gtx/number_precision.hpp"
|
||||
#include "./gtx/ocl_type.hpp"
|
||||
#include "./gtx/optimum_pow.hpp"
|
||||
#include "./gtx/orthonormalize.hpp"
|
||||
#include "./gtx/perpendicular.hpp"
|
||||
#include "./gtx/polar_coordinates.hpp"
|
||||
#include "./gtx/projection.hpp"
|
||||
#include "./gtx/quaternion.hpp"
|
||||
#include "./gtx/random.hpp"
|
||||
#include "./gtx/raw_data.hpp"
|
||||
#include "./gtx/reciprocal.hpp"
|
||||
#include "./gtx/rotate_vector.hpp"
|
||||
#include "./gtx/spline.hpp"
|
||||
#include "./gtx/std_based_type.hpp"
|
||||
#include "./gtx/string_cast.hpp"
|
||||
#include "./gtx/transform.hpp"
|
||||
#include "./gtx/transform2.hpp"
|
||||
#include "./gtx/unsigned_int.hpp"
|
||||
#include "./gtx/vec1.hpp"
|
||||
#include "./gtx/vector_access.hpp"
|
||||
#include "./gtx/vector_angle.hpp"
|
||||
#include "./gtx/vector_query.hpp"
|
||||
#include "./gtx/verbose_operator.hpp"
|
||||
#include "./gtx/wrap.hpp"
|
||||
|
||||
#if(GLM_ARCH & GLM_ARCH_SSE2)
|
||||
# include "./gtx/simd_vec4.hpp"
|
||||
# include "./gtx/simd_mat4.hpp"
|
||||
#endif
|
||||
|
||||
#include "./virtrev/xstream.hpp"
|
||||
|
||||
//const float goldenRatio = 1.618033988749894848f;
|
||||
//const float pi = 3.141592653589793238f;
|
||||
|
||||
#endif //glm_ext
|
||||
@@ -1,24 +1,90 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2005-01-14
|
||||
// Updated : 2011-01-19
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/glm.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref core
|
||||
/// @file glm/glm.hpp
|
||||
/// @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.
|
||||
///
|
||||
/// 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
|
||||
/// @ref core_precision "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 @ref core_template "template types".
|
||||
///
|
||||
/// The best documentation for GLM Core is the current GLSL specification,
|
||||
/// <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.clean.pdf">version 4.2
|
||||
/// (pdf file)</a>.
|
||||
/// There are a few @ref pg_differences "differences" between GLM core and GLSL.
|
||||
///
|
||||
/// GLM core functionnalities require <glm/glm.hpp> to be included to be used.
|
||||
///
|
||||
/// @defgroup core_types Types
|
||||
///
|
||||
/// @brief 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 @ref core_template.
|
||||
///
|
||||
/// @ingroup core
|
||||
///
|
||||
/// @defgroup core_precision Precision types
|
||||
///
|
||||
/// @brief 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 @em 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 @ref core_template that use a particular precision.
|
||||
///
|
||||
/// None of these types make any guarantees about the actual precision used.
|
||||
///
|
||||
/// @ingroup core
|
||||
///
|
||||
/// @defgroup core_template Template types
|
||||
///
|
||||
/// @brief The generic template types used as the basis for the core types.
|
||||
///
|
||||
/// These types are all templates used to define the actual @ref core_types.
|
||||
/// These templetes are implementation details of GLM types and should not be used explicitly.
|
||||
///
|
||||
/// @ingroup core
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "core/_fixes.hpp"
|
||||
|
||||
#ifndef glm_glm
|
||||
#define glm_glm
|
||||
|
||||
//! TODO: to delete
|
||||
#define GLMvalType typename genType::value_type
|
||||
|
||||
#include <cmath>
|
||||
#include <climits>
|
||||
#include <cfloat>
|
||||
#include <limits>
|
||||
#include <cstdio>
|
||||
#include "core/setup.hpp"
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_CORE_INCLUDED_DISPLAYED))
|
||||
@@ -26,62 +92,20 @@
|
||||
# pragma message("GLM: Core library included")
|
||||
#endif//GLM_MESSAGE
|
||||
|
||||
//! GLM namespace, it contains all GLSL based features.
|
||||
namespace glm
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
bool main_bug();
|
||||
bool main_core();
|
||||
}//namespace test
|
||||
|
||||
//! GLM core. Namespace that includes all the feature define by GLSL 4.10.6 specification. This namespace is included in glm namespace.
|
||||
namespace core
|
||||
{
|
||||
//! Scalar, vectors and matrices
|
||||
//! from section 4.1.2 Booleans, 4.1.3 Integers section, 4.1.4 Floats section,
|
||||
//! 4.1.5 Vectors and section 4.1.6 Matrices of GLSL 1.30.8 specification.
|
||||
//! This namespace resolves precision qualifier define in section 4.5 of GLSL 1.30.8 specification.
|
||||
namespace type{}
|
||||
|
||||
//! Some of the functions defined in section 8 Built-in Functions of GLSL 1.30.8 specification.
|
||||
//! Angle and trigonometry, exponential, common, geometric, matrix and vector relational functions.
|
||||
namespace function{}
|
||||
}
|
||||
//namespace core
|
||||
|
||||
//! G-Truc Creation stable extensions.
|
||||
namespace gtc{}
|
||||
|
||||
//! G-Truc Creation experimental extensions.
|
||||
//! The interface could change between releases.
|
||||
namespace gtx{}
|
||||
|
||||
//! VIRTREV extensions.
|
||||
namespace img{}
|
||||
|
||||
} //namespace glm
|
||||
|
||||
#include "./core/_detail.hpp"
|
||||
#include "./core/_vectorize.hpp"
|
||||
#include "./core/type.hpp"
|
||||
|
||||
#include "./core/func_trigonometric.hpp"
|
||||
#include "./core/func_exponential.hpp"
|
||||
#include "./core/func_common.hpp"
|
||||
#include "./core/func_packing.hpp"
|
||||
//#include "./core/func_packing.hpp"
|
||||
#include "./core/func_geometric.hpp"
|
||||
#include "./core/func_matrix.hpp"
|
||||
#include "./core/func_vector_relational.hpp"
|
||||
#include "./core/func_integer.hpp"
|
||||
#include "./core/func_noise.hpp"
|
||||
#include "./core/_swizzle.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
using namespace core::type;
|
||||
using namespace core::type::precision;
|
||||
using namespace core::function;
|
||||
} //namespace glm
|
||||
//#include "./core/func_vector_relational.hpp"
|
||||
//#include "./core/func_integer.hpp"
|
||||
//#include "./core/func_noise.hpp"
|
||||
//#include "./core/_swizzle.hpp"
|
||||
|
||||
////////////////////
|
||||
// check type sizes
|
||||
@@ -101,4 +125,4 @@ namespace glm
|
||||
GLM_STATIC_ASSERT(sizeof(glm::detail::float64) == 8, "float64 size isn't 8 bytes on this platform");
|
||||
#endif//GLM_STATIC_ASSERT_NULL
|
||||
|
||||
#endif //glm_glm
|
||||
#endif//glm_glm
|
||||
|
||||
@@ -1,370 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-04-29
|
||||
// Updated : 2010-02-07
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/half_float.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_gtc_half_float
|
||||
#define glm_gtc_half_float
|
||||
|
||||
// Dependency:
|
||||
#include "../glm.hpp"
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(glm_ext))
|
||||
# pragma message("GLM: GLM_GTC_half_float extension included")
|
||||
#endif
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
bool main_gtc_half_float();
|
||||
}//namespace
|
||||
namespace detail
|
||||
{
|
||||
#ifndef _MSC_EXTENSIONS
|
||||
template <>
|
||||
struct tvec2<thalf>
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef thalf value_type;
|
||||
typedef std::size_t size_type;
|
||||
static size_type value_size();
|
||||
|
||||
typedef tvec2<thalf> type;
|
||||
typedef tvec2<bool> bool_type;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Data
|
||||
|
||||
thalf x, y;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
thalf & operator[](size_type i);
|
||||
thalf const & operator[](size_type i) const;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
|
||||
tvec2();
|
||||
tvec2(tvec2<thalf> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
|
||||
explicit tvec2(ctor);
|
||||
explicit tvec2(
|
||||
thalf const & s);
|
||||
explicit tvec2(
|
||||
thalf const & s1,
|
||||
thalf const & s2);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle constructors
|
||||
|
||||
tvec2(tref2<thalf> const & r);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion scalar constructors
|
||||
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec2(U const & x);
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U, typename V>
|
||||
explicit tvec2(U const & x, V const & y);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion vector constructors
|
||||
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec2(tvec2<U> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec2(tvec3<U> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec2(tvec4<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary arithmetic operators
|
||||
|
||||
tvec2<thalf>& operator= (tvec2<thalf> const & v);
|
||||
|
||||
tvec2<thalf>& operator+=(thalf const & s);
|
||||
tvec2<thalf>& operator+=(tvec2<thalf> const & v);
|
||||
tvec2<thalf>& operator-=(thalf const & s);
|
||||
tvec2<thalf>& operator-=(tvec2<thalf> const & v);
|
||||
tvec2<thalf>& operator*=(thalf const & s);
|
||||
tvec2<thalf>& operator*=(tvec2<thalf> const & v);
|
||||
tvec2<thalf>& operator/=(thalf const & s);
|
||||
tvec2<thalf>& operator/=(tvec2<thalf> const & v);
|
||||
tvec2<thalf>& operator++();
|
||||
tvec2<thalf>& operator--();
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
thalf swizzle(comp X) const;
|
||||
tvec2<thalf> swizzle(comp X, comp Y) const;
|
||||
tvec3<thalf> swizzle(comp X, comp Y, comp Z) const;
|
||||
tvec4<thalf> swizzle(comp X, comp Y, comp Z, comp W) const;
|
||||
tref2<thalf> swizzle(comp X, comp Y);
|
||||
};
|
||||
|
||||
template <>
|
||||
struct tvec3<thalf>
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef thalf value_type;
|
||||
typedef std::size_t size_type;
|
||||
static size_type value_size();
|
||||
|
||||
typedef tvec3<thalf> type;
|
||||
typedef tvec3<bool> bool_type;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Data
|
||||
|
||||
thalf x, y, z;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
thalf & operator[](size_type i);
|
||||
thalf const & operator[](size_type i) const;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
|
||||
tvec3();
|
||||
tvec3(tvec3<thalf> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
|
||||
explicit tvec3(ctor);
|
||||
explicit tvec3(
|
||||
thalf const & s);
|
||||
explicit tvec3(
|
||||
thalf const & s1,
|
||||
thalf const & s2,
|
||||
thalf const & s3);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle constructors
|
||||
|
||||
tvec3(tref3<thalf> const & r);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion scalar constructors
|
||||
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec3(U const & x);
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U, typename V, typename W>
|
||||
explicit tvec3(U const & x, V const & y, W const & z);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion vector constructors
|
||||
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
explicit tvec3(tvec2<A> const & v, B const & s);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
explicit tvec3(A const & s, tvec2<B> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec3(tvec3<U> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec3(tvec4<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary arithmetic operators
|
||||
|
||||
tvec3<thalf>& operator= (tvec3<thalf> const & v);
|
||||
|
||||
tvec3<thalf>& operator+=(thalf const & s);
|
||||
tvec3<thalf>& operator+=(tvec3<thalf> const & v);
|
||||
tvec3<thalf>& operator-=(thalf const & s);
|
||||
tvec3<thalf>& operator-=(tvec3<thalf> const & v);
|
||||
tvec3<thalf>& operator*=(thalf const & s);
|
||||
tvec3<thalf>& operator*=(tvec3<thalf> const & v);
|
||||
tvec3<thalf>& operator/=(thalf const & s);
|
||||
tvec3<thalf>& operator/=(tvec3<thalf> const & v);
|
||||
tvec3<thalf>& operator++();
|
||||
tvec3<thalf>& operator--();
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
thalf swizzle(comp X) const;
|
||||
tvec2<thalf> swizzle(comp X, comp Y) const;
|
||||
tvec3<thalf> swizzle(comp X, comp Y, comp Z) const;
|
||||
tvec4<thalf> swizzle(comp X, comp Y, comp Z, comp W) const;
|
||||
tref3<thalf> swizzle(comp X, comp Y, comp Z);
|
||||
};
|
||||
|
||||
template <>
|
||||
struct tvec4<thalf>
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef thalf value_type;
|
||||
typedef std::size_t size_type;
|
||||
static size_type value_size();
|
||||
|
||||
typedef tvec4<thalf> type;
|
||||
typedef tvec4<bool> bool_type;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Data
|
||||
|
||||
thalf x, y, z, w;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
thalf & operator[](size_type i);
|
||||
thalf const & operator[](size_type i) const;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
|
||||
tvec4();
|
||||
tvec4(tvec4<thalf> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
|
||||
explicit tvec4(ctor);
|
||||
explicit tvec4(
|
||||
thalf const & s);
|
||||
explicit tvec4(
|
||||
thalf const & s0,
|
||||
thalf const & s1,
|
||||
thalf const & s2,
|
||||
thalf const & s3);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle constructors
|
||||
|
||||
tvec4(tref4<thalf> const & r);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion scalar constructors
|
||||
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec4(U const & x);
|
||||
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C, typename D>
|
||||
explicit tvec4(A const & x, B const & y, C const & z, D const & w);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion vector constructors
|
||||
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C>
|
||||
explicit tvec4(tvec2<A> const & v, B const & s1, C const & s2);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C>
|
||||
explicit tvec4(A const & s1, tvec2<B> const & v, C const & s2);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B, typename C>
|
||||
explicit tvec4(A const & s1, B const & s2, tvec2<C> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
explicit tvec4(tvec3<A> const & v, B const & s);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
explicit tvec4(A const & s, tvec3<B> const & v);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename A, typename B>
|
||||
explicit tvec4(tvec2<A> const & v1, tvec2<B> const & v2);
|
||||
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
|
||||
template <typename U>
|
||||
explicit tvec4(tvec4<U> const & v);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary arithmetic operators
|
||||
|
||||
tvec4<thalf>& operator= (tvec4<thalf> const & v);
|
||||
|
||||
tvec4<thalf>& operator+=(thalf const & s);
|
||||
tvec4<thalf>& operator+=(tvec4<thalf> const & v);
|
||||
tvec4<thalf>& operator-=(thalf const & s);
|
||||
tvec4<thalf>& operator-=(tvec4<thalf> const & v);
|
||||
tvec4<thalf>& operator*=(thalf const & s);
|
||||
tvec4<thalf>& operator*=(tvec4<thalf> const & v);
|
||||
tvec4<thalf>& operator/=(thalf const & s);
|
||||
tvec4<thalf>& operator/=(tvec4<thalf> const & v);
|
||||
tvec4<thalf>& operator++();
|
||||
tvec4<thalf>& operator--();
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
thalf swizzle(comp X) const;
|
||||
tvec2<thalf> swizzle(comp X, comp Y) const;
|
||||
tvec3<thalf> swizzle(comp X, comp Y, comp Z) const;
|
||||
tvec4<thalf> swizzle(comp X, comp Y, comp Z, comp W) const;
|
||||
tref4<thalf> swizzle(comp X, comp Y, comp Z, comp W);
|
||||
};
|
||||
#endif//_MSC_EXTENSIONS
|
||||
}
|
||||
//namespace detail
|
||||
|
||||
namespace gtc{
|
||||
//! GLM_GTC_half_float extension: Add support for half precision floating-point types
|
||||
namespace half_float
|
||||
{
|
||||
/// \addtogroup gtc_half_float
|
||||
///@{
|
||||
|
||||
//! Type for half-precision floating-point numbers.
|
||||
//! From GLM_GTC_half_float extension.
|
||||
typedef detail::thalf half;
|
||||
|
||||
//! Vector of 2 half-precision floating-point numbers.
|
||||
//! From GLM_GTC_half_float extension.
|
||||
typedef detail::tvec2<detail::thalf> hvec2;
|
||||
|
||||
//! Vector of 3 half-precision floating-point numbers.
|
||||
//! From GLM_GTC_half_float extension.
|
||||
typedef detail::tvec3<detail::thalf> hvec3;
|
||||
|
||||
//! Vector of 4 half-precision floating-point numbers.
|
||||
//! From GLM_GTC_half_float extension.
|
||||
typedef detail::tvec4<detail::thalf> hvec4;
|
||||
|
||||
//! 2 * 2 matrix of half-precision floating-point numbers.
|
||||
//! From GLM_GTC_half_float extension.
|
||||
typedef detail::tmat2x2<detail::thalf> hmat2;
|
||||
|
||||
//! 3 * 3 matrix of half-precision floating-point numbers.
|
||||
//! From GLM_GTC_half_float extension.
|
||||
typedef detail::tmat3x3<detail::thalf> hmat3;
|
||||
|
||||
//! 4 * 4 matrix of half-precision floating-point numbers.
|
||||
//! From GLM_GTC_half_float extension.
|
||||
typedef detail::tmat4x4<detail::thalf> hmat4;
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace half_float
|
||||
}//namespace gtc
|
||||
}//namespace glm
|
||||
|
||||
#include "half_float.inl"
|
||||
|
||||
namespace glm{using namespace gtc::half_float;}
|
||||
|
||||
#endif//glm_gtc_half_float
|
||||
@@ -1,975 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2005-12-21
|
||||
// Updated : 2010-02-07
|
||||
// Licence : This source is under MIT licence
|
||||
// File : glm/gtc/half_float.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail{
|
||||
|
||||
#ifndef _MSC_EXTENSIONS
|
||||
|
||||
//////////////////////////////////////
|
||||
// hvec2
|
||||
|
||||
inline tvec2<thalf>::size_type tvec2<thalf>::value_size()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
inline thalf & tvec2<thalf>::operator[](tvec2<thalf>::size_type i)
|
||||
{
|
||||
assert(/*i >= tvec2<thalf>::size_type(0) && */i < tvec2<thalf>::value_size());
|
||||
return (&x)[i];
|
||||
}
|
||||
|
||||
inline thalf const & tvec2<thalf>::operator[](tvec2<thalf>::size_type i) const
|
||||
{
|
||||
assert(/*i >= tvec2<thalf>::size_type(0) && */i < tvec2<thalf>::value_size());
|
||||
return (&x)[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
|
||||
inline tvec2<thalf>::tvec2() :
|
||||
x(thalf(0.f)),
|
||||
y(thalf(0.f))
|
||||
{}
|
||||
|
||||
inline tvec2<thalf>::tvec2
|
||||
(
|
||||
tvec2<thalf> const & v
|
||||
) :
|
||||
x(v.x),
|
||||
y(v.y)
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
|
||||
inline tvec2<thalf>::tvec2
|
||||
(
|
||||
thalf const & s
|
||||
) :
|
||||
x(s),
|
||||
y(s)
|
||||
{}
|
||||
|
||||
inline tvec2<thalf>::tvec2
|
||||
(
|
||||
thalf const & s1,
|
||||
thalf const & s2
|
||||
) :
|
||||
x(s1),
|
||||
y(s2)
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle constructors
|
||||
|
||||
inline tvec2<thalf>::tvec2
|
||||
(
|
||||
tref2<thalf> const & r
|
||||
) :
|
||||
x(r.x),
|
||||
y(r.y)
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion scalar constructors
|
||||
|
||||
template <typename U>
|
||||
inline tvec2<thalf>::tvec2
|
||||
(
|
||||
U const & x
|
||||
) :
|
||||
x(thalf(x)),
|
||||
y(thalf(x))
|
||||
{}
|
||||
|
||||
template <typename U, typename V>
|
||||
inline tvec2<thalf>::tvec2
|
||||
(
|
||||
U const & x,
|
||||
V const & y
|
||||
) :
|
||||
x(thalf(x)),
|
||||
y(thalf(y))
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion vector constructors
|
||||
|
||||
template <typename U>
|
||||
inline tvec2<thalf>::tvec2
|
||||
(
|
||||
tvec2<U> const & v
|
||||
) :
|
||||
x(thalf(v.x)),
|
||||
y(thalf(v.y))
|
||||
{}
|
||||
|
||||
template <typename U>
|
||||
inline tvec2<thalf>::tvec2
|
||||
(
|
||||
tvec3<U> const & v
|
||||
) :
|
||||
x(thalf(v.x)),
|
||||
y(thalf(v.y))
|
||||
{}
|
||||
|
||||
template <typename U>
|
||||
inline tvec2<thalf>::tvec2
|
||||
(
|
||||
tvec4<U> const & v
|
||||
) :
|
||||
x(thalf(v.x)),
|
||||
y(thalf(v.y))
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary arithmetic operators
|
||||
|
||||
inline tvec2<thalf> & tvec2<thalf>::operator=
|
||||
(
|
||||
tvec2<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x = v.x;
|
||||
this->y = v.y;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec2<thalf> & tvec2<thalf>::operator+=
|
||||
(
|
||||
thalf const & s
|
||||
)
|
||||
{
|
||||
this->x += s;
|
||||
this->y += s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec2<thalf> & tvec2<thalf>::operator+=
|
||||
(
|
||||
tvec2<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x += v.x;
|
||||
this->y += v.y;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec2<thalf> & tvec2<thalf>::operator-=
|
||||
(
|
||||
thalf const & s
|
||||
)
|
||||
{
|
||||
this->x -= s;
|
||||
this->y -= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec2<thalf> & tvec2<thalf>::operator-=
|
||||
(
|
||||
tvec2<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x -= v.x;
|
||||
this->y -= v.y;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec2<thalf>& tvec2<thalf>::operator*=
|
||||
(
|
||||
thalf const & s
|
||||
)
|
||||
{
|
||||
this->x *= s;
|
||||
this->y *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec2<thalf> & tvec2<thalf>::operator*=
|
||||
(
|
||||
tvec2<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x *= v.x;
|
||||
this->y *= v.y;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec2<thalf> & tvec2<thalf>::operator/=
|
||||
(
|
||||
thalf const & s
|
||||
)
|
||||
{
|
||||
this->x /= s;
|
||||
this->y /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec2<thalf> & tvec2<thalf>::operator/=
|
||||
(
|
||||
tvec2<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x /= v.x;
|
||||
this->y /= v.y;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec2<thalf> & tvec2<thalf>::operator++()
|
||||
{
|
||||
++this->x;
|
||||
++this->y;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec2<thalf>& tvec2<thalf>::operator--()
|
||||
{
|
||||
--this->x;
|
||||
--this->y;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
inline thalf tvec2<thalf>::swizzle(comp x) const
|
||||
{
|
||||
return (*this)[x];
|
||||
}
|
||||
|
||||
inline tvec2<thalf> tvec2<thalf>::swizzle(comp x, comp y) const
|
||||
{
|
||||
return tvec2<thalf>(
|
||||
(*this)[x],
|
||||
(*this)[y]);
|
||||
}
|
||||
|
||||
inline tvec3<thalf> tvec2<thalf>::swizzle(comp x, comp y, comp z) const
|
||||
{
|
||||
return tvec3<thalf>(
|
||||
(*this)[x],
|
||||
(*this)[y],
|
||||
(*this)[z]);
|
||||
}
|
||||
|
||||
inline tvec4<thalf> tvec2<thalf>::swizzle(comp x, comp y, comp z, comp w) const
|
||||
{
|
||||
return tvec4<thalf>(
|
||||
(*this)[x],
|
||||
(*this)[y],
|
||||
(*this)[z],
|
||||
(*this)[w]);
|
||||
}
|
||||
|
||||
inline tref2<thalf> tvec2<thalf>::swizzle(comp x, comp y)
|
||||
{
|
||||
return tref2<thalf>(
|
||||
(*this)[x],
|
||||
(*this)[y]);
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// hvec3
|
||||
|
||||
inline tvec3<thalf>::size_type tvec3<thalf>::value_size()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
inline thalf & tvec3<thalf>::operator[]
|
||||
(
|
||||
tvec3<thalf>::size_type i
|
||||
)
|
||||
{
|
||||
assert(/*i >= tvec3<thalf>::size_type(0) &&*/ i < tvec3<thalf>::value_size());
|
||||
|
||||
return (&x)[i];
|
||||
}
|
||||
|
||||
inline thalf const & tvec3<thalf>::operator[]
|
||||
(
|
||||
tvec3<thalf>::size_type i
|
||||
) const
|
||||
{
|
||||
assert(/*i >= tvec3<thalf>::size_type(0) &&*/ i < tvec3<thalf>::value_size());
|
||||
|
||||
return (&x)[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
|
||||
inline tvec3<thalf>::tvec3() :
|
||||
x(thalf(0)),
|
||||
y(thalf(0)),
|
||||
z(thalf(0))
|
||||
{}
|
||||
|
||||
inline tvec3<thalf>::tvec3
|
||||
(
|
||||
tvec3<thalf> const & v
|
||||
) :
|
||||
x(v.x),
|
||||
y(v.y),
|
||||
z(v.z)
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
|
||||
inline tvec3<thalf>::tvec3
|
||||
(
|
||||
thalf const & s
|
||||
) :
|
||||
x(s),
|
||||
y(s),
|
||||
z(s)
|
||||
{}
|
||||
|
||||
inline tvec3<thalf>::tvec3
|
||||
(
|
||||
thalf const & s0,
|
||||
thalf const & s1,
|
||||
thalf const & s2
|
||||
) :
|
||||
x(s0),
|
||||
y(s1),
|
||||
z(s2)
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle constructors
|
||||
|
||||
inline tvec3<thalf>::tvec3
|
||||
(
|
||||
tref3<thalf> const & r
|
||||
) :
|
||||
x(r.x),
|
||||
y(r.y),
|
||||
z(r.z)
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion scalar constructors
|
||||
|
||||
template <typename U>
|
||||
inline tvec3<thalf>::tvec3
|
||||
(
|
||||
U const & x
|
||||
) :
|
||||
x(thalf(x)),
|
||||
y(thalf(x)),
|
||||
z(thalf(x))
|
||||
{}
|
||||
|
||||
template <typename A, typename B, typename C>
|
||||
inline tvec3<thalf>::tvec3
|
||||
(
|
||||
A const & x,
|
||||
B const & y,
|
||||
C const & z
|
||||
) :
|
||||
x(thalf(x)),
|
||||
y(thalf(y)),
|
||||
z(thalf(z))
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion vector constructors
|
||||
|
||||
template <typename A, typename B>
|
||||
inline tvec3<thalf>::tvec3
|
||||
(
|
||||
tvec2<A> const & v,
|
||||
B const & s
|
||||
) :
|
||||
x(thalf(v.x)),
|
||||
y(thalf(v.y)),
|
||||
z(thalf(s))
|
||||
{}
|
||||
|
||||
template <typename A, typename B>
|
||||
inline tvec3<thalf>::tvec3
|
||||
(
|
||||
A const & s,
|
||||
tvec2<B> const & v
|
||||
) :
|
||||
x(thalf(s)),
|
||||
y(thalf(v.x)),
|
||||
z(thalf(v.y))
|
||||
{}
|
||||
|
||||
template <typename U>
|
||||
inline tvec3<thalf>::tvec3
|
||||
(
|
||||
tvec3<U> const & v
|
||||
) :
|
||||
x(thalf(v.x)),
|
||||
y(thalf(v.y)),
|
||||
z(thalf(v.z))
|
||||
{}
|
||||
|
||||
template <typename U>
|
||||
inline tvec3<thalf>::tvec3
|
||||
(
|
||||
tvec4<U> const & v
|
||||
) :
|
||||
x(thalf(v.x)),
|
||||
y(thalf(v.y)),
|
||||
z(thalf(v.z))
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary arithmetic operators
|
||||
|
||||
inline tvec3<thalf> & tvec3<thalf>::operator=
|
||||
(
|
||||
tvec3<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x = v.x;
|
||||
this->y = v.y;
|
||||
this->z = v.z;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec3<thalf> & tvec3<thalf>::operator+=
|
||||
(
|
||||
thalf const & s
|
||||
)
|
||||
{
|
||||
this->x += s;
|
||||
this->y += s;
|
||||
this->z += s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec3<thalf> & tvec3<thalf>::operator+=
|
||||
(
|
||||
tvec3<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x += v.x;
|
||||
this->y += v.y;
|
||||
this->z += v.z;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec3<thalf> & tvec3<thalf>::operator-=
|
||||
(
|
||||
thalf const & s
|
||||
)
|
||||
{
|
||||
this->x -= s;
|
||||
this->y -= s;
|
||||
this->z -= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec3<thalf> & tvec3<thalf>::operator-=
|
||||
(
|
||||
tvec3<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x -= v.x;
|
||||
this->y -= v.y;
|
||||
this->z -= v.z;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec3<thalf> & tvec3<thalf>::operator*=
|
||||
(
|
||||
thalf const & s
|
||||
)
|
||||
{
|
||||
this->x *= s;
|
||||
this->y *= s;
|
||||
this->z *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec3<thalf> & tvec3<thalf>::operator*=
|
||||
(
|
||||
tvec3<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x *= v.x;
|
||||
this->y *= v.y;
|
||||
this->z *= v.z;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec3<thalf> & tvec3<thalf>::operator/=
|
||||
(
|
||||
thalf const & s
|
||||
)
|
||||
{
|
||||
this->x /= s;
|
||||
this->y /= s;
|
||||
this->z /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec3<thalf> & tvec3<thalf>::operator/=
|
||||
(
|
||||
tvec3<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x /= v.x;
|
||||
this->y /= v.y;
|
||||
this->z /= v.z;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec3<thalf> & tvec3<thalf>::operator++()
|
||||
{
|
||||
++this->x;
|
||||
++this->y;
|
||||
++this->z;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec3<thalf> & tvec3<thalf>::operator--()
|
||||
{
|
||||
--this->x;
|
||||
--this->y;
|
||||
--this->z;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
inline thalf tvec3<thalf>::swizzle(comp x) const
|
||||
{
|
||||
return (*this)[x];
|
||||
}
|
||||
|
||||
inline tvec2<thalf> tvec3<thalf>::swizzle(comp x, comp y) const
|
||||
{
|
||||
return tvec2<thalf>(
|
||||
(*this)[x],
|
||||
(*this)[y]);
|
||||
}
|
||||
|
||||
inline tvec3<thalf> tvec3<thalf>::swizzle(comp x, comp y, comp z) const
|
||||
{
|
||||
return tvec3<thalf>(
|
||||
(*this)[x],
|
||||
(*this)[y],
|
||||
(*this)[z]);
|
||||
}
|
||||
|
||||
inline tvec4<thalf> tvec3<thalf>::swizzle(comp x, comp y, comp z, comp w) const
|
||||
{
|
||||
return tvec4<thalf>(
|
||||
(*this)[x],
|
||||
(*this)[y],
|
||||
(*this)[z],
|
||||
(*this)[w]);
|
||||
}
|
||||
|
||||
inline tref3<thalf> tvec3<thalf>::swizzle(comp x, comp y, comp z)
|
||||
{
|
||||
return tref3<thalf>(
|
||||
(*this)[x],
|
||||
(*this)[y],
|
||||
(*this)[z]);
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// hvec4
|
||||
|
||||
inline tvec4<thalf>::size_type tvec4<thalf>::value_size()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
inline thalf & tvec4<thalf>::operator[]
|
||||
(
|
||||
tvec4<thalf>::size_type i
|
||||
)
|
||||
{
|
||||
assert(/*i >= tvec4<thalf>::size_type(0) && */i < tvec4<thalf>::value_size());
|
||||
|
||||
return (&x)[i];
|
||||
}
|
||||
|
||||
inline thalf const & tvec4<thalf>::operator[]
|
||||
(
|
||||
tvec4<thalf>::size_type i
|
||||
) const
|
||||
{
|
||||
assert(/*i >= tvec4<thalf>::size_type(0) && */i < tvec4<thalf>::value_size());
|
||||
|
||||
return (&x)[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
|
||||
inline tvec4<thalf>::tvec4() :
|
||||
x(thalf(0)),
|
||||
y(thalf(0)),
|
||||
z(thalf(0)),
|
||||
w(thalf(0))
|
||||
{}
|
||||
|
||||
inline tvec4<thalf>::tvec4
|
||||
(
|
||||
tvec4<thalf> const & v
|
||||
) :
|
||||
x(v.x),
|
||||
y(v.y),
|
||||
z(v.z),
|
||||
w(v.w)
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
|
||||
inline tvec4<thalf>::tvec4
|
||||
(
|
||||
thalf const & s
|
||||
) :
|
||||
x(s),
|
||||
y(s),
|
||||
z(s),
|
||||
w(s)
|
||||
{}
|
||||
|
||||
inline tvec4<thalf>::tvec4
|
||||
(
|
||||
thalf const & s1,
|
||||
thalf const & s2,
|
||||
thalf const & s3,
|
||||
thalf const & s4
|
||||
) :
|
||||
x(s1),
|
||||
y(s2),
|
||||
z(s3),
|
||||
w(s4)
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle constructors
|
||||
|
||||
inline tvec4<thalf>::tvec4
|
||||
(
|
||||
tref4<thalf> const & r
|
||||
) :
|
||||
x(r.x),
|
||||
y(r.y),
|
||||
z(r.z),
|
||||
w(r.w)
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion scalar constructors
|
||||
|
||||
template <typename U>
|
||||
inline tvec4<thalf>::tvec4
|
||||
(
|
||||
U const & x
|
||||
) :
|
||||
x(thalf(x)),
|
||||
y(thalf(x)),
|
||||
z(thalf(x)),
|
||||
w(thalf(x))
|
||||
{}
|
||||
|
||||
template <typename A, typename B, typename C, typename D>
|
||||
inline tvec4<thalf>::tvec4
|
||||
(
|
||||
A const & x,
|
||||
B const & y,
|
||||
C const & z,
|
||||
D const & w
|
||||
) :
|
||||
x(thalf(x)),
|
||||
y(thalf(y)),
|
||||
z(thalf(z)),
|
||||
w(thalf(w))
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Convertion vector constructors
|
||||
|
||||
template <typename A, typename B, typename C>
|
||||
inline tvec4<thalf>::tvec4
|
||||
(
|
||||
tvec2<A> const & v,
|
||||
B const & s1,
|
||||
C const & s2
|
||||
) :
|
||||
x(thalf(v.x)),
|
||||
y(thalf(v.y)),
|
||||
z(thalf(s1)),
|
||||
w(thalf(s2))
|
||||
{}
|
||||
|
||||
template <typename A, typename B, typename C>
|
||||
inline tvec4<thalf>::tvec4
|
||||
(
|
||||
A const & s1,
|
||||
tvec2<B> const & v,
|
||||
C const & s2
|
||||
) :
|
||||
x(thalf(s1)),
|
||||
y(thalf(v.x)),
|
||||
z(thalf(v.y)),
|
||||
w(thalf(s2))
|
||||
{}
|
||||
|
||||
template <typename A, typename B, typename C>
|
||||
inline tvec4<thalf>::tvec4
|
||||
(
|
||||
A const & s1,
|
||||
B const & s2,
|
||||
tvec2<C> const & v
|
||||
) :
|
||||
x(thalf(s1)),
|
||||
y(thalf(s2)),
|
||||
z(thalf(v.x)),
|
||||
w(thalf(v.y))
|
||||
{}
|
||||
|
||||
template <typename A, typename B>
|
||||
inline tvec4<thalf>::tvec4
|
||||
(
|
||||
tvec3<A> const & v,
|
||||
B const & s
|
||||
) :
|
||||
x(thalf(v.x)),
|
||||
y(thalf(v.y)),
|
||||
z(thalf(v.z)),
|
||||
w(thalf(s))
|
||||
{}
|
||||
|
||||
template <typename A, typename B>
|
||||
inline tvec4<thalf>::tvec4
|
||||
(
|
||||
A const & s,
|
||||
tvec3<B> const & v
|
||||
) :
|
||||
x(thalf(s)),
|
||||
y(thalf(v.x)),
|
||||
z(thalf(v.y)),
|
||||
w(thalf(v.z))
|
||||
{}
|
||||
|
||||
template <typename A, typename B>
|
||||
inline tvec4<thalf>::tvec4
|
||||
(
|
||||
tvec2<A> const & v1,
|
||||
tvec2<B> const & v2
|
||||
) :
|
||||
x(thalf(v1.x)),
|
||||
y(thalf(v1.y)),
|
||||
z(thalf(v2.x)),
|
||||
w(thalf(v2.y))
|
||||
{}
|
||||
|
||||
template <typename U>
|
||||
inline tvec4<thalf>::tvec4
|
||||
(
|
||||
tvec4<U> const & v
|
||||
) :
|
||||
x(thalf(v.x)),
|
||||
y(thalf(v.y)),
|
||||
z(thalf(v.z)),
|
||||
w(thalf(v.w))
|
||||
{}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary arithmetic operators
|
||||
|
||||
inline tvec4<thalf>& tvec4<thalf>::operator=
|
||||
(
|
||||
tvec4<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x = v.x;
|
||||
this->y = v.y;
|
||||
this->z = v.z;
|
||||
this->w = v.w;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec4<thalf>& tvec4<thalf>::operator+=
|
||||
(
|
||||
thalf const & s
|
||||
)
|
||||
{
|
||||
this->x += s;
|
||||
this->y += s;
|
||||
this->z += s;
|
||||
this->w += s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec4<thalf>& tvec4<thalf>::operator+=
|
||||
(
|
||||
tvec4<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x += v.x;
|
||||
this->y += v.y;
|
||||
this->z += v.z;
|
||||
this->w += v.w;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec4<thalf>& tvec4<thalf>::operator-=
|
||||
(
|
||||
thalf const & s
|
||||
)
|
||||
{
|
||||
this->x -= s;
|
||||
this->y -= s;
|
||||
this->z -= s;
|
||||
this->w -= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec4<thalf>& tvec4<thalf>::operator-=
|
||||
(
|
||||
tvec4<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x -= v.x;
|
||||
this->y -= v.y;
|
||||
this->z -= v.z;
|
||||
this->w -= v.w;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec4<thalf>& tvec4<thalf>::operator*=
|
||||
(
|
||||
thalf const & s
|
||||
)
|
||||
{
|
||||
this->x *= s;
|
||||
this->y *= s;
|
||||
this->z *= s;
|
||||
this->w *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec4<thalf>& tvec4<thalf>::operator*=
|
||||
(
|
||||
tvec4<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x *= v.x;
|
||||
this->y *= v.y;
|
||||
this->z *= v.z;
|
||||
this->w *= v.w;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec4<thalf>& tvec4<thalf>::operator/=
|
||||
(
|
||||
thalf const & s
|
||||
)
|
||||
{
|
||||
this->x /= s;
|
||||
this->y /= s;
|
||||
this->z /= s;
|
||||
this->w /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec4<thalf>& tvec4<thalf>::operator/=
|
||||
(
|
||||
tvec4<thalf> const & v
|
||||
)
|
||||
{
|
||||
this->x /= v.x;
|
||||
this->y /= v.y;
|
||||
this->z /= v.z;
|
||||
this->w /= v.w;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec4<thalf>& tvec4<thalf>::operator++()
|
||||
{
|
||||
++this->x;
|
||||
++this->y;
|
||||
++this->z;
|
||||
++this->w;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline tvec4<thalf>& tvec4<thalf>::operator--()
|
||||
{
|
||||
--this->x;
|
||||
--this->y;
|
||||
--this->z;
|
||||
--this->w;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
inline thalf tvec4<thalf>::swizzle(comp x) const
|
||||
{
|
||||
return (*this)[x];
|
||||
}
|
||||
|
||||
inline tvec2<thalf> tvec4<thalf>::swizzle(comp x, comp y) const
|
||||
{
|
||||
return tvec2<thalf>(
|
||||
(*this)[x],
|
||||
(*this)[y]);
|
||||
}
|
||||
|
||||
inline tvec3<thalf> tvec4<thalf>::swizzle(comp x, comp y, comp z) const
|
||||
{
|
||||
return tvec3<thalf>(
|
||||
(*this)[x],
|
||||
(*this)[y],
|
||||
(*this)[z]);
|
||||
}
|
||||
|
||||
inline tvec4<thalf> tvec4<thalf>::swizzle(comp x, comp y, comp z, comp w) const
|
||||
{
|
||||
return tvec4<thalf>(
|
||||
(*this)[x],
|
||||
(*this)[y],
|
||||
(*this)[z],
|
||||
(*this)[w]);
|
||||
}
|
||||
|
||||
inline tref4<thalf> tvec4<thalf>::swizzle(comp x, comp y, comp z, comp w)
|
||||
{
|
||||
return tref4<thalf>(
|
||||
(*this)[x],
|
||||
(*this)[y],
|
||||
(*this)[z],
|
||||
(*this)[w]);
|
||||
}
|
||||
|
||||
#endif//_MSC_EXTENSIONS
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
@@ -1,71 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2005-12-27
|
||||
// Updated : 2010-11-12
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/matrix_access.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Dependency:
|
||||
// - GLM core
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_gtc_matrix_access
|
||||
#define glm_gtc_matrix_access
|
||||
|
||||
// Dependency:
|
||||
#include "../glm.hpp"
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(glm_ext))
|
||||
# pragma message("GLM: GLM_GTC_matrix_access extension included")
|
||||
#endif
|
||||
|
||||
namespace glm{
|
||||
namespace gtc{
|
||||
//! GLM_GTC_matrix_access extension: Set a column or a row of a matrix
|
||||
namespace matrix_access
|
||||
{
|
||||
/// \addtogroup gtc_matrix_access
|
||||
///@{
|
||||
|
||||
//! Get a specific row of a matrix.
|
||||
//! From GLM_GTC_matrix_access extension.
|
||||
template <typename genType>
|
||||
typename genType::row_type row(
|
||||
genType const & m,
|
||||
int index);
|
||||
|
||||
//! Set a specific row to a matrix.
|
||||
//! From GLM_GTC_matrix_access extension.
|
||||
template <typename genType>
|
||||
genType row(
|
||||
genType const & m,
|
||||
int index,
|
||||
typename genType::row_type const & x);
|
||||
|
||||
//! Get a specific column of a matrix.
|
||||
//! From GLM_GTC_matrix_access extension.
|
||||
template <typename genType>
|
||||
typename genType::col_type column(
|
||||
genType const & m,
|
||||
int index);
|
||||
|
||||
//! Set a specific column to a matrix.
|
||||
//! From GLM_GTC_matrix_access extension.
|
||||
template <typename genType>
|
||||
genType column(
|
||||
genType const & m,
|
||||
int index,
|
||||
typename genType::col_type const & x);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace matrix_access
|
||||
}//namespace gtc
|
||||
}//namespace glm
|
||||
|
||||
#include "matrix_access.inl"
|
||||
|
||||
namespace glm{using namespace gtc::matrix_access;}
|
||||
|
||||
#endif//glm_gtc_matrix_access
|
||||
@@ -1,59 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2005-12-27
|
||||
// Updated : 2010-11-12
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/matrix_access.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace gtc{
|
||||
namespace matrix_access
|
||||
{
|
||||
template <typename genType>
|
||||
inline genType row(
|
||||
genType const & m,
|
||||
int index,
|
||||
typename genType::row_type const & x)
|
||||
{
|
||||
genType Result = m;
|
||||
for(typename genType::size_type i = 0; i < genType::row_size(); ++i)
|
||||
Result[i][index] = x[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename genType>
|
||||
inline typename genType::row_type row(
|
||||
genType const & m,
|
||||
int index)
|
||||
{
|
||||
typename genType::row_type Result;
|
||||
for(typename genType::size_type i = 0; i < genType::row_size(); ++i)
|
||||
Result[i] = m[i][index];
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename genType>
|
||||
inline genType column(
|
||||
genType const & m,
|
||||
int index,
|
||||
typename genType::col_type const & x)
|
||||
{
|
||||
genType Result = m;
|
||||
Result[index] = x;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename genType>
|
||||
inline typename genType::col_type column(
|
||||
genType const & m,
|
||||
int index)
|
||||
{
|
||||
return m[index];
|
||||
}
|
||||
|
||||
}//namespace matrix_access
|
||||
}//namespace gtc
|
||||
}//namespace glm
|
||||
|
||||
@@ -1,215 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-01-20
|
||||
// Updated : 2011-01-20
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/matrix_integer.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Dependency:
|
||||
// - GLM core
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_gtc_matrix_integer
|
||||
#define glm_gtc_matrix_integer
|
||||
|
||||
// Dependency:
|
||||
#include "../glm.hpp"
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(glm_ext))
|
||||
# pragma message("GLM: GLM_GTC_matrix_integer extension included")
|
||||
#endif
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
bool main_gtc_matrix_integer();
|
||||
}//namespace test
|
||||
|
||||
namespace gtc{
|
||||
//! GLM_GTC_matrix_integer extension: Add integer matrices
|
||||
namespace matrix_integer
|
||||
{
|
||||
/// \addtogroup gtc_matrix_integer
|
||||
///@{
|
||||
|
||||
typedef detail::tmat2x2<highp_int> highp_imat2; //!< \brief High-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x3<highp_int> highp_imat3; //!< \brief High-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x4<highp_int> highp_imat4; //!< \brief High-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
typedef detail::tmat2x2<highp_int> highp_imat2x2; //!< \brief High-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat2x3<highp_int> highp_imat2x3; //!< \brief High-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat2x4<highp_int> highp_imat2x4; //!< \brief High-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x2<highp_int> highp_imat3x2; //!< \brief High-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x3<highp_int> highp_imat3x3; //!< \brief High-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x4<highp_int> highp_imat3x4; //!< \brief High-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x2<highp_int> highp_imat4x2; //!< \brief High-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x3<highp_int> highp_imat4x3; //!< \brief High-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x4<highp_int> highp_imat4x4; //!< \brief High-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
typedef detail::tmat2x2<mediump_int> mediump_imat2; //!< \brief Medium-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x3<mediump_int> mediump_imat3; //!< \brief Medium-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x4<mediump_int> mediump_imat4; //!< \brief Medium-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
typedef detail::tmat2x2<mediump_int> mediump_imat2x2; //!< \brief Medium-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat2x3<mediump_int> mediump_imat2x3; //!< \brief Medium-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat2x4<mediump_int> mediump_imat2x4; //!< \brief Medium-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x2<mediump_int> mediump_imat3x2; //!< \brief Medium-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x3<mediump_int> mediump_imat3x3; //!< \brief Medium-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x4<mediump_int> mediump_imat3x4; //!< \brief Medium-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x2<mediump_int> mediump_imat4x2; //!< \brief Medium-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x3<mediump_int> mediump_imat4x3; //!< \brief Medium-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x4<mediump_int> mediump_imat4x4; //!< \brief Medium-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
typedef detail::tmat2x2<lowp_int> lowp_imat2; //!< \brief Low-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x3<lowp_int> lowp_imat3; //!< \brief Low-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x4<lowp_int> lowp_imat4; //!< \brief Low-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
typedef detail::tmat2x2<lowp_int> lowp_imat2x2; //!< \brief Low-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat2x3<lowp_int> lowp_imat2x3; //!< \brief Low-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat2x4<lowp_int> lowp_imat2x4; //!< \brief Low-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x2<lowp_int> lowp_imat3x2; //!< \brief Low-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x3<lowp_int> lowp_imat3x3; //!< \brief Low-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x4<lowp_int> lowp_imat3x4; //!< \brief Low-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x2<lowp_int> lowp_imat4x2; //!< \brief Low-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x3<lowp_int> lowp_imat4x3; //!< \brief Low-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x4<lowp_int> lowp_imat4x4; //!< \brief Low-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
typedef detail::tmat2x2<highp_uint> highp_umat2; //!< \brief High-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x3<highp_uint> highp_umat3; //!< \brief High-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x4<highp_uint> highp_umat4; //!< \brief High-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
typedef detail::tmat2x2<highp_uint> highp_umat2x2; //!< \brief High-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat2x3<highp_uint> highp_umat2x3; //!< \brief High-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat2x4<highp_uint> highp_umat2x4; //!< \brief High-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x2<highp_uint> highp_umat3x2; //!< \brief High-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x3<highp_uint> highp_umat3x3; //!< \brief High-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x4<highp_uint> highp_umat3x4; //!< \brief High-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x2<highp_uint> highp_umat4x2; //!< \brief High-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x3<highp_uint> highp_umat4x3; //!< \brief High-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x4<highp_uint> highp_umat4x4; //!< \brief High-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
typedef detail::tmat2x2<mediump_uint> mediump_umat2; //!< \brief Medium-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x3<mediump_uint> mediump_umat3; //!< \brief Medium-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x4<mediump_uint> mediump_umat4; //!< \brief Medium-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
typedef detail::tmat2x2<mediump_uint> mediump_umat2x2; //!< \brief Medium-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat2x3<mediump_uint> mediump_umat2x3; //!< \brief Medium-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat2x4<mediump_uint> mediump_umat2x4; //!< \brief Medium-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x2<mediump_uint> mediump_umat3x2; //!< \brief Medium-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x3<mediump_uint> mediump_umat3x3; //!< \brief Medium-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x4<mediump_uint> mediump_umat3x4; //!< \brief Medium-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x2<mediump_uint> mediump_umat4x2; //!< \brief Medium-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x3<mediump_uint> mediump_umat4x3; //!< \brief Medium-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x4<mediump_uint> mediump_umat4x4; //!< \brief Medium-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
typedef detail::tmat2x2<lowp_uint> lowp_umat2; //!< \brief Low-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x3<lowp_uint> lowp_umat3; //!< \brief Low-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x4<lowp_uint> lowp_umat4; //!< \brief Low-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
typedef detail::tmat2x2<lowp_uint> lowp_umat2x2; //!< \brief Low-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat2x3<lowp_uint> lowp_umat2x3; //!< \brief Low-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat2x4<lowp_uint> lowp_umat2x4; //!< \brief Low-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x2<lowp_uint> lowp_umat3x2; //!< \brief Low-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x3<lowp_uint> lowp_umat3x3; //!< \brief Low-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat3x4<lowp_uint> lowp_umat3x4; //!< \brief Low-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x2<lowp_uint> lowp_umat4x2; //!< \brief Low-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x3<lowp_uint> lowp_umat4x3; //!< \brief Low-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef detail::tmat4x4<lowp_uint> lowp_umat4x4; //!< \brief Low-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
#if(defined(GLM_PRECISION) && (GLM_PRECISION & GLM_PRECISION_HIGHP_INT))
|
||||
typedef highp_imat2 imat2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_imat3 imat3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_imat4 imat4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
typedef highp_imat2x2 imat2x2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_imat2x3 imat2x3; //!< \brief Signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_imat2x4 imat2x4; //!< \brief Signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_imat3x2 imat3x2; //!< \brief Signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_imat3x3 imat3x3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_imat3x4 imat3x4; //!< \brief Signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_imat4x2 imat4x2; //!< \brief Signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_imat4x3 imat4x3; //!< \brief Signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_imat4x4 imat4x4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
#elif(defined(GLM_PRECISION) && (GLM_PRECISION & GLM_PRECISION_LOWP_INT))
|
||||
typedef lowp_imat2 imat2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_imat3 imat3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_imat4 imat4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_imat2x2 imat2x2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_imat2x3 imat2x3; //!< \brief Signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_imat2x4 imat2x4; //!< \brief Signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_imat3x2 imat3x2; //!< \brief Signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_imat3x3 imat3x3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_imat3x4 imat3x4; //!< \brief Signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_imat4x2 imat4x2; //!< \brief Signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_imat4x3 imat4x3; //!< \brief Signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_imat4x4 imat4x4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
#else //if(defined(GLM_PRECISION) && (GLM_PRECISION & GLM_PRECISION_MEDIUMP_INT))
|
||||
typedef mediump_imat2 imat2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_imat3 imat3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_imat4 imat4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_imat2x2 imat2x2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_imat2x3 imat2x3; //!< \brief Signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_imat2x4 imat2x4; //!< \brief Signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_imat3x2 imat3x2; //!< \brief Signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_imat3x3 imat3x3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_imat3x4 imat3x4; //!< \brief Signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_imat4x2 imat4x2; //!< \brief Signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_imat4x3 imat4x3; //!< \brief Signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_imat4x4 imat4x4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
#endif//GLM_PRECISION
|
||||
|
||||
#if(defined(GLM_PRECISION) && (GLM_PRECISION & GLM_PRECISION_HIGHP_UINT))
|
||||
typedef highp_umat2 umat2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_umat3 umat3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_umat4 umat4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_umat2x2 umat2x2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_umat2x3 umat2x3; //!< \brief Unsigned integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_umat2x4 umat2x4; //!< \brief Unsigned integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_umat3x2 umat3x2; //!< \brief Unsigned integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_umat3x3 umat3x3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_umat3x4 umat3x4; //!< \brief Unsigned integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_umat4x2 umat4x2; //!< \brief Unsigned integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_umat4x3 umat4x3; //!< \brief Unsigned integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef highp_umat4x4 umat4x4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
#elif(defined(GLM_PRECISION) && (GLM_PRECISION & GLM_PRECISION_LOWP_UINT))
|
||||
typedef lowp_umat2 umat2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_umat3 umat3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_umat4 umat4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_umat2x2 umat2x2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_umat2x3 umat2x3; //!< \brief Unsigned integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_umat2x4 umat2x4; //!< \brief Unsigned integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_umat3x2 umat3x2; //!< \brief Unsigned integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_umat3x3 umat3x3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_umat3x4 umat3x4; //!< \brief Unsigned integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_umat4x2 umat4x2; //!< \brief Unsigned integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_umat4x3 umat4x3; //!< \brief Unsigned integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef lowp_umat4x4 umat4x4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
|
||||
#else //if(defined(GLM_PRECISION) && (GLM_PRECISION & GLM_PRECISION_MEDIUMP_UINT))
|
||||
typedef mediump_umat2 umat2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_umat3 umat3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_umat4 umat4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_umat2x2 umat2x2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_umat2x3 umat2x3; //!< \brief Unsigned integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_umat2x4 umat2x4; //!< \brief Unsigned integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_umat3x2 umat3x2; //!< \brief Unsigned integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_umat3x3 umat3x3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_umat3x4 umat3x4; //!< \brief Unsigned integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_umat4x2 umat4x2; //!< \brief Unsigned integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_umat4x3 umat4x3; //!< \brief Unsigned integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
typedef mediump_umat4x4 umat4x4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
|
||||
#endif//GLM_PRECISION
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace matrix_integer
|
||||
}//namespace gtc
|
||||
}//namespace glm
|
||||
|
||||
namespace glm{using namespace gtc::matrix_integer;}
|
||||
|
||||
#endif//glm_gtc_matrix_integer
|
||||
@@ -1,52 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2005-12-21
|
||||
// Updated : 2010-12-13
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/matrix_inverse.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Dependency:
|
||||
// - GLM core
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_gtc_matrix_inverse
|
||||
#define glm_gtc_matrix_inverse
|
||||
|
||||
// Dependency:
|
||||
#include "../glm.hpp"
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(glm_ext))
|
||||
# pragma message("GLM: GLM_GTC_matrix_inverse extension included")
|
||||
#endif
|
||||
|
||||
namespace glm{
|
||||
namespace gtc{
|
||||
//! GLM_GTC_matrix_inverse extension: Inverse matrix functions
|
||||
namespace matrix_inverse
|
||||
{
|
||||
/// \addtogroup gtc_matrix_inverse
|
||||
///@{
|
||||
|
||||
//! Fast matrix inverse for affine matrix.
|
||||
//! From GLM_GTC_matrix_inverse extension.
|
||||
template <typename genType>
|
||||
genType affineInverse(genType const & m);
|
||||
|
||||
//! Compute the inverse transpose of a matrix.
|
||||
//! From GLM_GTC_matrix_inverse extension.
|
||||
template <typename genType>
|
||||
inline typename genType::value_type inverseTranspose(
|
||||
genType const & m);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace matrix_inverse
|
||||
}//namespace gtc
|
||||
}//namespace glm
|
||||
|
||||
#include "matrix_inverse.inl"
|
||||
|
||||
namespace glm{using namespace gtc::matrix_inverse;}
|
||||
|
||||
#endif//glm_gtc_matrix_inverse
|
||||
@@ -1,139 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2005-12-21
|
||||
// Updated : 2010-12-13
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/matrix_inverse.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace gtc{
|
||||
namespace matrix_inverse
|
||||
{
|
||||
template <typename T>
|
||||
inline detail::tmat3x3<T> affineInverse
|
||||
(
|
||||
detail::tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
detail::tmat3x3<T> Result(m);
|
||||
Result[2] = detail::tvec3<T>(0, 0, 1);
|
||||
Result = transpose(Result);
|
||||
detail::tvec3<T> Translation = Result * detail::tvec3<T>(-detail::tvec2<T>(m[2]), m[2][2]);
|
||||
Result[2] = Translation;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x4<T> affineInverse
|
||||
(
|
||||
detail::tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
detail::tmat4x4<T> Result(m);
|
||||
Result[3] = detail::tvec4<T>(0, 0, 0, 1);
|
||||
Result = transpose(Result);
|
||||
detail::tvec4<T> Translation = Result * detail::tvec4<T>(-detail::tvec3<T>(m[3]), m[3][3]);
|
||||
Result[3] = Translation;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename valType>
|
||||
inline detail::tmat2x2<valType> inverseTranspose(
|
||||
detail::tmat2x2<valType> const & m)
|
||||
{
|
||||
valType Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1];
|
||||
|
||||
detail::tmat2x2<valType> Inverse(
|
||||
+ m[1][1] / Determinant,
|
||||
- m[0][1] / Determinant,
|
||||
- m[1][0] / Determinant,
|
||||
+ m[0][0] / Determinant);
|
||||
|
||||
return Inverse;
|
||||
}
|
||||
|
||||
template <typename valType>
|
||||
inline detail::tmat3x3<valType> inverseTranspose(
|
||||
detail::tmat3x3<valType> const & m)
|
||||
{
|
||||
valType Determinant =
|
||||
+ m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1])
|
||||
- m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0])
|
||||
+ m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);
|
||||
|
||||
detail::tmat3x3<valType> Inverse;
|
||||
Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);
|
||||
Inverse[0][1] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);
|
||||
Inverse[0][2] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);
|
||||
Inverse[1][0] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);
|
||||
Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);
|
||||
Inverse[1][2] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);
|
||||
Inverse[2][0] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
|
||||
Inverse[2][1] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);
|
||||
Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);
|
||||
Inverse /= Determinant;
|
||||
|
||||
return Inverse;
|
||||
}
|
||||
|
||||
template <typename valType>
|
||||
inline detail::tmat4x4<valType> inverseTranspose(
|
||||
detail::tmat4x4<valType> const & m)
|
||||
{
|
||||
valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
|
||||
valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
|
||||
valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
|
||||
valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
|
||||
valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
|
||||
valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
|
||||
valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
|
||||
valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
|
||||
valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
|
||||
valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
|
||||
valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
|
||||
valType SubFactor11 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
|
||||
valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
|
||||
valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
|
||||
valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
|
||||
valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
|
||||
valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
|
||||
valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
|
||||
valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
|
||||
|
||||
detail::tmat4x4<valType> Inverse;
|
||||
Inverse[0][0] = + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02);
|
||||
Inverse[0][1] = - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04);
|
||||
Inverse[0][2] = + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05);
|
||||
Inverse[0][3] = - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05);
|
||||
|
||||
Inverse[1][0] = - (m[0][1] * SubFactor00 - m[0][2] * SubFactor01 + m[0][3] * SubFactor02);
|
||||
Inverse[1][1] = + (m[0][0] * SubFactor00 - m[0][2] * SubFactor03 + m[0][3] * SubFactor04);
|
||||
Inverse[1][2] = - (m[0][0] * SubFactor01 - m[0][1] * SubFactor03 + m[0][3] * SubFactor05);
|
||||
Inverse[1][3] = + (m[0][0] * SubFactor02 - m[0][1] * SubFactor04 + m[0][2] * SubFactor05);
|
||||
|
||||
Inverse[2][0] = + (m[0][1] * SubFactor06 - m[0][2] * SubFactor07 + m[0][3] * SubFactor08);
|
||||
Inverse[2][1] = - (m[0][0] * SubFactor06 - m[0][2] * SubFactor09 + m[0][3] * SubFactor10);
|
||||
Inverse[2][2] = + (m[0][0] * SubFactor11 - m[0][1] * SubFactor09 + m[0][3] * SubFactor12);
|
||||
Inverse[2][3] = - (m[0][0] * SubFactor08 - m[0][1] * SubFactor10 + m[0][2] * SubFactor12);
|
||||
|
||||
Inverse[3][0] = - (m[0][1] * SubFactor13 - m[0][2] * SubFactor14 + m[0][3] * SubFactor15);
|
||||
Inverse[3][1] = + (m[0][0] * SubFactor13 - m[0][2] * SubFactor16 + m[0][3] * SubFactor17);
|
||||
Inverse[3][2] = - (m[0][0] * SubFactor14 - m[0][1] * SubFactor16 + m[0][3] * SubFactor18);
|
||||
Inverse[3][3] = + (m[0][0] * SubFactor15 - m[0][1] * SubFactor17 + m[0][2] * SubFactor18);
|
||||
|
||||
valType Determinant =
|
||||
+ m[0][0] * Inverse[0][0]
|
||||
+ m[0][1] * Inverse[0][1]
|
||||
+ m[0][2] * Inverse[0][2]
|
||||
+ m[0][3] * Inverse[0][3];
|
||||
|
||||
Inverse /= Determinant;
|
||||
|
||||
return Inverse;
|
||||
}
|
||||
|
||||
}//namespace matrix_inverse
|
||||
}//namespace gtc
|
||||
}//namespace glm
|
||||
@@ -1,18 +1,50 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-04-29
|
||||
// Updated : 2009-04-29
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/matrix_transform.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Dependency:
|
||||
// - GLM core
|
||||
// - GLM_GTC_matrix_operation
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref gtc_matrix_transform
|
||||
/// @file glm/gtc/matrix_transform.hpp
|
||||
/// @date 2009-04-29 / 2011-05-16
|
||||
/// @author Christophe Riccio
|
||||
///
|
||||
/// @see core (dependence)
|
||||
/// @see gtx_transform
|
||||
/// @see gtx_transform2
|
||||
///
|
||||
/// @defgroup gtc_matrix_transform GLM_GTC_matrix_transform
|
||||
/// @ingroup gtc
|
||||
///
|
||||
/// @brief 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.
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_gtc_matrix_transform
|
||||
#define glm_gtc_matrix_transform
|
||||
#ifndef GLM_GTC_matrix_transform
|
||||
#define GLM_GTC_matrix_transform GLM_VERSION
|
||||
|
||||
// Dependency:
|
||||
#include "../glm.hpp"
|
||||
@@ -23,142 +55,237 @@
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
bool main_gtc_matrix_transform();
|
||||
}//namespace test
|
||||
/// @addtogroup gtc_matrix_transform
|
||||
/// @{
|
||||
|
||||
namespace gtc{
|
||||
//! GLM_GTC_matrix_transform extension: Add transformation matrices
|
||||
namespace matrix_transform
|
||||
{
|
||||
/// \addtogroup gtc_matrix_transform
|
||||
///@{
|
||||
|
||||
//! Builds a translation 4 * 4 matrix created from a vector of 3 components.
|
||||
//! From GLM_GTC_matrix_transform extension.
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> translate(
|
||||
detail::tmat4x4<T> const & m,
|
||||
detail::tvec3<T> const & v);
|
||||
/// Builds a translation 4 * 4 matrix created from a vector of 3 components.
|
||||
///
|
||||
/// @param m Input matrix multiplied by this translation matrix.
|
||||
/// @param v Coordinates of a translation vector.
|
||||
/// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
|
||||
/// @code
|
||||
/// #include <glm/glm.hpp>
|
||||
/// #include <glm/gtc/matrix_transform.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
|
||||
/// @endcode
|
||||
/// @see gtc_matrix_transform
|
||||
/// @see gtx_transform
|
||||
/// @see - translate(T x, T y, T z)
|
||||
/// @see - translate(detail::tmat4x4<T> const & m, T x, T y, T z)
|
||||
/// @see - translate(detail::tvec3<T> const & v)
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> translate(
|
||||
detail::tmat4x4<T> const & m,
|
||||
detail::tvec3<T> const & v);
|
||||
|
||||
//! Builds a rotation 4 * 4 matrix created from an axis vector and an angle expressed in degrees.
|
||||
//! From GLM_GTC_matrix_transform extension.
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> rotate(
|
||||
detail::tmat4x4<T> const & m,
|
||||
T const & angle,
|
||||
detail::tvec3<T> const & v);
|
||||
/// Builds a rotation 4 * 4 matrix created from an axis vector and an angle.
|
||||
///
|
||||
/// @param m Input matrix multiplied by this rotation matrix.
|
||||
/// @param angle Rotation angle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
|
||||
/// @param axis Rotation axis, recommanded to be normalized.
|
||||
/// @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 - rotate(T angle, T x, T y, T z)
|
||||
/// @see - rotate(detail::tmat4x4<T> const & m, T angle, T x, T y, T z)
|
||||
/// @see - rotate(T angle, detail::tvec3<T> const & v)
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> rotate(
|
||||
detail::tmat4x4<T> const & m,
|
||||
T const & angle,
|
||||
detail::tvec3<T> const & axis);
|
||||
|
||||
//! Builds a scale 4 * 4 matrix created from 3 scalars.
|
||||
//! From GLM_GTC_matrix_transform extension.
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> scale(
|
||||
detail::tmat4x4<T> const & m,
|
||||
detail::tvec3<T> const & v);
|
||||
/// Builds a scale 4 * 4 matrix created from 3 scalars.
|
||||
///
|
||||
/// @param m Input matrix multiplied by this scale matrix.
|
||||
/// @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(detail::tmat4x4<T> const & m, T x, T y, T z)
|
||||
/// @see - scale(detail::tvec3<T> const & v)
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> scale(
|
||||
detail::tmat4x4<T> const & m,
|
||||
detail::tvec3<T> const & v);
|
||||
|
||||
//! Creates a matrix for an orthographic parallel viewing volume.
|
||||
//! From GLM_GTC_matrix_transform extension.
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> 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.
|
||||
///
|
||||
/// @param left
|
||||
/// @param right
|
||||
/// @param bottom
|
||||
/// @param top
|
||||
/// @param zNear
|
||||
/// @param zFar
|
||||
/// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
|
||||
/// @see gtc_matrix_transform
|
||||
/// @see - glm::ortho(T const & left, T const & right, T const & bottom, T const & top)
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> ortho(
|
||||
T const & left,
|
||||
T const & right,
|
||||
T const & bottom,
|
||||
T const & top,
|
||||
T const & zNear,
|
||||
T const & zFar);
|
||||
|
||||
//! Creates a matrix for projecting two-dimensional coordinates onto the screen.
|
||||
//! From GLM_GTC_matrix_transform extension.
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> ortho(
|
||||
T const & left,
|
||||
T const & right,
|
||||
T const & bottom,
|
||||
T const & top);
|
||||
/// Creates a matrix for projecting two-dimensional coordinates onto the screen.
|
||||
///
|
||||
/// @param left
|
||||
/// @param right
|
||||
/// @param bottom
|
||||
/// @param top
|
||||
/// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
|
||||
/// @see gtc_matrix_transform
|
||||
/// @see - glm::ortho(T const & left, T const & right, T const & bottom, T const & top, T const & zNear, T const & zFar)
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> ortho(
|
||||
T const & left,
|
||||
T const & right,
|
||||
T const & bottom,
|
||||
T const & top);
|
||||
|
||||
//! Creates a frustum matrix.
|
||||
//! From GLM_GTC_matrix_transform extension.
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> frustum(
|
||||
T const & left,
|
||||
T const & right,
|
||||
T const & bottom,
|
||||
T const & top,
|
||||
T const & nearVal,
|
||||
T const & farVal);
|
||||
/// Creates a frustum matrix.
|
||||
///
|
||||
/// @param left
|
||||
/// @param right
|
||||
/// @param bottom
|
||||
/// @param top
|
||||
/// @param near
|
||||
/// @param far
|
||||
/// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
|
||||
/// @see gtc_matrix_transform
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> frustum(
|
||||
T const & left,
|
||||
T const & right,
|
||||
T const & bottom,
|
||||
T const & top,
|
||||
T const & near,
|
||||
T const & far);
|
||||
|
||||
//! Creates a matrix for a symetric perspective-view frustum.
|
||||
//! From GLM_GTC_matrix_transform extension.
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> perspective(
|
||||
T const & fovy,
|
||||
T const & aspect,
|
||||
T const & zNear,
|
||||
T const & zFar);
|
||||
/// Creates a matrix for a symetric perspective-view frustum.
|
||||
///
|
||||
/// @param fovy Expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
|
||||
/// @param aspect
|
||||
/// @param near
|
||||
/// @param far
|
||||
/// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
|
||||
/// @see gtc_matrix_transform
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> perspective(
|
||||
T const & fovy,
|
||||
T const & aspect,
|
||||
T const & near,
|
||||
T const & far);
|
||||
|
||||
//! Builds a perspective projection matrix based on a field of view
|
||||
//! From GLM_GTC_matrix_transform extension.
|
||||
template <typename valType>
|
||||
detail::tmat4x4<valType> perspectiveFov(
|
||||
valType const & fov,
|
||||
valType const & width,
|
||||
valType const & height,
|
||||
valType const & zNear,
|
||||
valType const & zFar);
|
||||
/// Builds a perspective projection matrix based on a field of view.
|
||||
///
|
||||
/// @param fov Expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
|
||||
/// @param width
|
||||
/// @param height
|
||||
/// @param near
|
||||
/// @param far
|
||||
/// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
|
||||
/// @see gtc_matrix_transform
|
||||
template <typename valType>
|
||||
detail::tmat4x4<valType> perspectiveFov(
|
||||
valType const & fov,
|
||||
valType const & width,
|
||||
valType const & height,
|
||||
valType const & near,
|
||||
valType const & far);
|
||||
|
||||
//! Creates a matrix for a symmetric perspective-view frustum with far plane at infinite .
|
||||
//! From GLM_GTC_matrix_transform extension.
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> infinitePerspective(
|
||||
T fovy, T aspect, T zNear);
|
||||
/// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite.
|
||||
///
|
||||
/// @param fovy Expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
|
||||
/// @param aspect
|
||||
/// @param near
|
||||
/// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
|
||||
/// @see gtc_matrix_transform
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> infinitePerspective(
|
||||
T fovy, T aspect, T near);
|
||||
|
||||
//! Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.
|
||||
//! From GLM_GTC_matrix_transform extension.
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> tweakedInfinitePerspective(
|
||||
T fovy, T aspect, T zNear);
|
||||
/// 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 if GLM_FORCE_RADIANS is define or degrees otherwise.
|
||||
/// @param aspect
|
||||
/// @param near
|
||||
/// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
|
||||
/// @see gtc_matrix_transform
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> tweakedInfinitePerspective(
|
||||
T fovy, T aspect, T near);
|
||||
|
||||
//! Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.
|
||||
//! From GLM_GTC_matrix_transform extension.
|
||||
template <typename T, typename U>
|
||||
detail::tvec3<T> project(
|
||||
detail::tvec3<T> const & obj,
|
||||
detail::tmat4x4<T> const & model,
|
||||
detail::tmat4x4<T> const & proj,
|
||||
detail::tvec4<U> const & viewport);
|
||||
/// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.
|
||||
///
|
||||
/// @param obj
|
||||
/// @param model
|
||||
/// @param proj
|
||||
/// @param viewport
|
||||
/// @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
|
||||
template <typename T, typename U>
|
||||
detail::tvec3<T> project(
|
||||
detail::tvec3<T> const & obj,
|
||||
detail::tmat4x4<T> const & model,
|
||||
detail::tmat4x4<T> const & proj,
|
||||
detail::tvec4<U> const & viewport);
|
||||
|
||||
//! Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.
|
||||
//! From GLM_GTC_matrix_transform extension.
|
||||
template <typename T, typename U>
|
||||
detail::tvec3<T> unProject(
|
||||
detail::tvec3<T> const & win,
|
||||
detail::tmat4x4<T> const & model,
|
||||
detail::tmat4x4<T> const & proj,
|
||||
detail::tvec4<U> const & viewport);
|
||||
/// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.
|
||||
///
|
||||
/// @param win
|
||||
/// @param model
|
||||
/// @param proj
|
||||
/// @param viewport
|
||||
/// @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
|
||||
template <typename T, typename U>
|
||||
detail::tvec3<T> unProject(
|
||||
detail::tvec3<T> const & win,
|
||||
detail::tmat4x4<T> const & model,
|
||||
detail::tmat4x4<T> const & proj,
|
||||
detail::tvec4<U> const & viewport);
|
||||
|
||||
//! Define a picking region
|
||||
//! From GLM_GTC_matrix_transform extension.
|
||||
template <typename T, typename U>
|
||||
detail::tmat4x4<T> pickMatrix(
|
||||
detail::tvec2<T> const & center,
|
||||
detail::tvec2<T> const & delta,
|
||||
detail::tvec4<U> const & viewport);
|
||||
/// Define a picking region
|
||||
///
|
||||
/// @param center
|
||||
/// @param delta
|
||||
/// @param viewport
|
||||
/// @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
|
||||
template <typename T, typename U>
|
||||
detail::tmat4x4<T> pickMatrix(
|
||||
detail::tvec2<T> const & center,
|
||||
detail::tvec2<T> const & delta,
|
||||
detail::tvec4<U> const & viewport);
|
||||
|
||||
//! Build a look at view matrix.
|
||||
//! From GLM_GTC_matrix_transform extension.
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> lookAt(
|
||||
detail::tvec3<T> const & eye,
|
||||
detail::tvec3<T> const & center,
|
||||
detail::tvec3<T> const & up);
|
||||
/// Build a look at view matrix.
|
||||
///
|
||||
/// @param eye Position of the camera
|
||||
/// @param center Position where the camera is looking at
|
||||
/// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1)
|
||||
/// @see gtc_matrix_transform
|
||||
/// @see - 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)
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> lookAt(
|
||||
detail::tvec3<T> const & eye,
|
||||
detail::tvec3<T> const & center,
|
||||
detail::tvec3<T> const & up);
|
||||
|
||||
///@}
|
||||
}//namespace matrix_transform
|
||||
}//namespace gtc
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#include "matrix_transform.inl"
|
||||
|
||||
namespace glm{using namespace gtc::matrix_transform;}
|
||||
|
||||
#endif//glm_gtc_matrix_transform
|
||||
#endif//GLM_GTC_matrix_transform
|
||||
|
||||
@@ -1,56 +1,77 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-04-29
|
||||
// Updated : 2009-04-29
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/matrix_transform.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.
|
||||
///
|
||||
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
/// LIABILITY, WHETHER IN AN ACTION 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_matrix_transform
|
||||
/// @file glm/gtc/matrix_transform.inl
|
||||
/// @date 2009-04-29 / 2011-06-15
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace gtc{
|
||||
namespace matrix_transform
|
||||
namespace glm
|
||||
{
|
||||
template <typename T>
|
||||
inline detail::tmat4x4<T> translate
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> translate
|
||||
(
|
||||
detail::tmat4x4<T> const & m,
|
||||
detail::tvec3<T> const & v
|
||||
)
|
||||
{
|
||||
{
|
||||
detail::tmat4x4<T> Result(m);
|
||||
Result[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3];
|
||||
return Result;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x4<T> rotate
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> rotate
|
||||
(
|
||||
detail::tmat4x4<T> const & m,
|
||||
T const & angle,
|
||||
detail::tvec3<T> const & v
|
||||
)
|
||||
{
|
||||
T a = radians(angle);
|
||||
T c = cos(a);
|
||||
T s = sin(a);
|
||||
{
|
||||
#ifdef GLM_FORCE_RADIANS
|
||||
T a = angle;
|
||||
#else
|
||||
T a = radians(angle);
|
||||
#endif
|
||||
T c = cos(a);
|
||||
T s = sin(a);
|
||||
|
||||
detail::tvec3<T> axis = normalize(v);
|
||||
detail::tvec3<T> axis = normalize(v);
|
||||
|
||||
detail::tvec3<T> temp = (T(1) - c) * axis;
|
||||
|
||||
detail::tmat4x4<T> Rotate(detail::tmat4x4<T>::null);
|
||||
detail::tmat4x4<T> Rotate(detail::tmat4x4<T>::null);
|
||||
Rotate[0][0] = c + temp[0] * axis[0];
|
||||
Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2];
|
||||
Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1];
|
||||
Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2];
|
||||
Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1];
|
||||
|
||||
Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2];
|
||||
Rotate[1][1] = c + temp[1] * axis[1];
|
||||
Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0];
|
||||
Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2];
|
||||
Rotate[1][1] = c + temp[1] * axis[1];
|
||||
Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0];
|
||||
|
||||
Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1];
|
||||
Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0];
|
||||
Rotate[2][2] = c + temp[2] * axis[2];
|
||||
Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1];
|
||||
Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0];
|
||||
Rotate[2][2] = c + temp[2] * axis[2];
|
||||
|
||||
detail::tmat4x4<T> Result(detail::tmat4x4<T>::null);
|
||||
Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2];
|
||||
@@ -58,33 +79,33 @@ namespace matrix_transform
|
||||
Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2];
|
||||
Result[3] = m[3];
|
||||
return Result;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x4<T> scale
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> scale
|
||||
(
|
||||
detail::tmat4x4<T> const & m,
|
||||
detail::tvec3<T> const & v
|
||||
)
|
||||
{
|
||||
detail::tmat4x4<T> Result(detail::tmat4x4<T>::null);
|
||||
{
|
||||
detail::tmat4x4<T> Result(detail::tmat4x4<T>::null);
|
||||
Result[0] = m[0] * v[0];
|
||||
Result[1] = m[1] * v[1];
|
||||
Result[2] = m[2] * v[2];
|
||||
Result[3] = m[3];
|
||||
return Result;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x4<T> translate_slow
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> translate_slow
|
||||
(
|
||||
detail::tmat4x4<T> const & m,
|
||||
detail::tvec3<T> const & v
|
||||
)
|
||||
{
|
||||
detail::tmat4x4<T> Result(T(1));
|
||||
Result[3] = detail::tvec4<T>(v, T(1));
|
||||
return m * Result;
|
||||
{
|
||||
detail::tmat4x4<T> Result(T(1));
|
||||
Result[3] = detail::tvec4<T>(v, T(1));
|
||||
return m * Result;
|
||||
|
||||
//detail::tmat4x4<valType> Result(m);
|
||||
Result[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3];
|
||||
@@ -93,64 +114,70 @@ namespace matrix_transform
|
||||
//Result[3][2] = m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2] + m[3][2];
|
||||
//Result[3][3] = m[0][3] * v[0] + m[1][3] * v[1] + m[2][3] * v[2] + m[3][3];
|
||||
//return Result;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x4<T> rotate_slow
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> rotate_slow
|
||||
(
|
||||
detail::tmat4x4<T> const & m,
|
||||
T const & angle,
|
||||
detail::tvec3<T> const & v
|
||||
)
|
||||
{
|
||||
T a = radians(angle);
|
||||
T c = cos(a);
|
||||
T s = sin(a);
|
||||
detail::tmat4x4<T> Result;
|
||||
{
|
||||
#ifdef GLM_FORCE_RADIANS
|
||||
T const a = angle;
|
||||
#else
|
||||
T const a = radians(angle);
|
||||
#endif
|
||||
T c = cos(a);
|
||||
T s = sin(a);
|
||||
detail::tmat4x4<T> Result;
|
||||
|
||||
detail::tvec3<T> axis = normalize(v);
|
||||
detail::tvec3<T> axis = normalize(v);
|
||||
|
||||
Result[0][0] = c + (1 - c) * axis.x * axis.x;
|
||||
Result[0][1] = (1 - c) * axis.x * axis.y + s * axis.z;
|
||||
Result[0][2] = (1 - c) * axis.x * axis.z - s * axis.y;
|
||||
Result[0][3] = 0;
|
||||
Result[0][0] = c + (1 - c) * axis.x * axis.x;
|
||||
Result[0][1] = (1 - c) * axis.x * axis.y + s * axis.z;
|
||||
Result[0][2] = (1 - c) * axis.x * axis.z - s * axis.y;
|
||||
Result[0][3] = 0;
|
||||
|
||||
Result[1][0] = (1 - c) * axis.y * axis.x - s * axis.z;
|
||||
Result[1][1] = c + (1 - c) * axis.y * axis.y;
|
||||
Result[1][2] = (1 - c) * axis.y * axis.z + s * axis.x;
|
||||
Result[1][3] = 0;
|
||||
Result[1][0] = (1 - c) * axis.y * axis.x - s * axis.z;
|
||||
Result[1][1] = c + (1 - c) * axis.y * axis.y;
|
||||
Result[1][2] = (1 - c) * axis.y * axis.z + s * axis.x;
|
||||
Result[1][3] = 0;
|
||||
|
||||
Result[2][0] = (1 - c) * axis.z * axis.x + s * axis.y;
|
||||
Result[2][1] = (1 - c) * axis.z * axis.y - s * axis.x;
|
||||
Result[2][2] = c + (1 - c) * axis.z * axis.z;
|
||||
Result[2][3] = 0;
|
||||
Result[2][0] = (1 - c) * axis.z * axis.x + s * axis.y;
|
||||
Result[2][1] = (1 - c) * axis.z * axis.y - s * axis.x;
|
||||
Result[2][2] = c + (1 - c) * axis.z * axis.z;
|
||||
Result[2][3] = 0;
|
||||
|
||||
Result[3] = detail::tvec4<T>(0, 0, 0, 1);
|
||||
return m * Result;
|
||||
}
|
||||
Result[3] = detail::tvec4<T>(0, 0, 0, 1);
|
||||
return m * Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x4<T> scale_slow
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> scale_slow
|
||||
(
|
||||
detail::tmat4x4<T> const & m,
|
||||
detail::tvec3<T> const & v
|
||||
)
|
||||
{
|
||||
detail::tmat4x4<T> Result(T(1));
|
||||
Result[0][0] = v.x;
|
||||
Result[1][1] = v.y;
|
||||
Result[2][2] = v.z;
|
||||
return m * Result;
|
||||
}
|
||||
{
|
||||
detail::tmat4x4<T> Result(T(1));
|
||||
Result[0][0] = v.x;
|
||||
Result[1][1] = v.y;
|
||||
Result[2][2] = v.z;
|
||||
return m * Result;
|
||||
}
|
||||
|
||||
template <typename valType>
|
||||
inline detail::tmat4x4<valType> ortho(
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<valType> ortho
|
||||
(
|
||||
valType const & left,
|
||||
valType const & right,
|
||||
valType const & bottom,
|
||||
valType const & top,
|
||||
valType const & zNear,
|
||||
valType const & zFar)
|
||||
valType const & zFar
|
||||
)
|
||||
{
|
||||
detail::tmat4x4<valType> Result(1);
|
||||
Result[0][0] = valType(2) / (right - left);
|
||||
@@ -163,7 +190,7 @@ namespace matrix_transform
|
||||
}
|
||||
|
||||
template <typename valType>
|
||||
inline detail::tmat4x4<valType> ortho(
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<valType> ortho(
|
||||
valType const & left,
|
||||
valType const & right,
|
||||
valType const & bottom,
|
||||
@@ -179,13 +206,15 @@ namespace matrix_transform
|
||||
}
|
||||
|
||||
template <typename valType>
|
||||
inline detail::tmat4x4<valType> frustum(
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<valType> frustum
|
||||
(
|
||||
valType const & left,
|
||||
valType const & right,
|
||||
valType const & bottom,
|
||||
valType const & top,
|
||||
valType const & nearVal,
|
||||
valType const & farVal)
|
||||
valType const & farVal
|
||||
)
|
||||
{
|
||||
detail::tmat4x4<valType> Result(0);
|
||||
Result[0][0] = (valType(2) * nearVal) / (right - left);
|
||||
@@ -199,11 +228,13 @@ namespace matrix_transform
|
||||
}
|
||||
|
||||
template <typename valType>
|
||||
inline detail::tmat4x4<valType> perspective(
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<valType> perspective
|
||||
(
|
||||
valType const & fovy,
|
||||
valType const & aspect,
|
||||
valType const & zNear,
|
||||
valType const & zFar)
|
||||
valType const & zFar
|
||||
)
|
||||
{
|
||||
valType range = tan(radians(fovy / valType(2))) * zNear;
|
||||
valType left = -range * aspect;
|
||||
@@ -219,9 +250,9 @@ namespace matrix_transform
|
||||
Result[3][2] = - (valType(2) * zFar * zNear) / (zFar - zNear);
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
template <typename valType>
|
||||
inline detail::tmat4x4<valType> perspectiveFov
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<valType> perspectiveFov
|
||||
(
|
||||
valType const & fov,
|
||||
valType const & width,
|
||||
@@ -230,26 +261,36 @@ namespace matrix_transform
|
||||
valType const & zFar
|
||||
)
|
||||
{
|
||||
#ifdef GLM_FORCE_RADIANS
|
||||
valType rad = fov;
|
||||
#else
|
||||
valType rad = glm::radians(fov);
|
||||
#endif
|
||||
valType h = glm::cos(valType(0.5) * rad) / glm::sin(valType(0.5) * rad);
|
||||
valType w = h * height / width;
|
||||
valType w = h * height / width; ///todo max(width , Height) / min(width , Height)?
|
||||
|
||||
detail::tmat4x4<valType> Result(valType(0));
|
||||
Result[0][0] = w;
|
||||
Result[1][1] = h;
|
||||
Result[2][2] = (zFar + zNear) / (zFar - zNear);
|
||||
Result[2][3] = valType(1);
|
||||
Result[3][2] = -(valType(2) * zFar * zNear) / (zFar - zNear);
|
||||
Result[2][2] = - (zFar + zNear) / (zFar - zNear);
|
||||
Result[2][3] = - valType(1);
|
||||
Result[3][2] = - (valType(2) * zFar * zNear) / (zFar - zNear);
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x4<T> infinitePerspective(
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> infinitePerspective
|
||||
(
|
||||
T fovy,
|
||||
T aspect,
|
||||
T zNear)
|
||||
T zNear
|
||||
)
|
||||
{
|
||||
T range = tan(radians(fovy / T(2))) * zNear;
|
||||
#ifdef GLM_FORCE_RADIANS
|
||||
T const range = tan(fovy / T(2)) * zNear;
|
||||
#else
|
||||
T const range = tan(radians(fovy / T(2))) * zNear;
|
||||
#endif
|
||||
T left = -range * aspect;
|
||||
T right = range * aspect;
|
||||
T bottom = -range;
|
||||
@@ -265,12 +306,18 @@ namespace matrix_transform
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x4<T> tweakedInfinitePerspective(
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> tweakedInfinitePerspective
|
||||
(
|
||||
T fovy,
|
||||
T aspect,
|
||||
T zNear)
|
||||
T zNear
|
||||
)
|
||||
{
|
||||
#ifdef GLM_FORCE_RADIANS
|
||||
T range = tan(fovy / T(2)) * zNear;
|
||||
#else
|
||||
T range = tan(radians(fovy / T(2))) * zNear;
|
||||
#endif
|
||||
T left = -range * aspect;
|
||||
T right = range * aspect;
|
||||
T bottom = -range;
|
||||
@@ -286,11 +333,13 @@ namespace matrix_transform
|
||||
}
|
||||
|
||||
template <typename T, typename U>
|
||||
inline detail::tvec3<T> project(
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> project
|
||||
(
|
||||
detail::tvec3<T> const & obj,
|
||||
detail::tmat4x4<T> const & model,
|
||||
detail::tmat4x4<T> const & proj,
|
||||
detail::tvec4<U> const & viewport)
|
||||
detail::tvec4<U> const & viewport
|
||||
)
|
||||
{
|
||||
detail::tvec4<T> tmp = detail::tvec4<T>(obj, T(1));
|
||||
tmp = model * tmp;
|
||||
@@ -305,11 +354,13 @@ namespace matrix_transform
|
||||
}
|
||||
|
||||
template <typename T, typename U>
|
||||
inline detail::tvec3<T> unProject(
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> unProject
|
||||
(
|
||||
detail::tvec3<T> const & win,
|
||||
detail::tmat4x4<T> const & model,
|
||||
detail::tmat4x4<T> const & proj,
|
||||
detail::tvec4<U> const & viewport)
|
||||
detail::tvec4<U> const & viewport
|
||||
)
|
||||
{
|
||||
detail::tmat4x4<T> inverse = glm::inverse(proj * model);
|
||||
|
||||
@@ -338,39 +389,42 @@ namespace matrix_transform
|
||||
if(!(delta.x > T(0) && delta.y > T(0)))
|
||||
return Result; // Error
|
||||
|
||||
detail::tvec3<T> Temp(
|
||||
(T(viewport[2]) - T(2) * (center.x - T(viewport[0]))) / delta.x,
|
||||
(T(viewport[3]) - T(2) * (center.y - T(viewport[1]))) / delta.y,
|
||||
T(0));
|
||||
|
||||
// Translate and scale the picked region to the entire window
|
||||
Result = translate(Result, (T(viewport[2]) - T(2) * (center.x - T(viewport[0]))) / delta.x, (T(viewport[3]) - T(2) * (center.y - T(viewport[1]))) / delta.y, T(0));
|
||||
return scale(Result, T(viewport[2]) / delta.x, T(viewport[3]) / delta.y, T(1));
|
||||
Result = translate(Result, Temp);
|
||||
return scale(Result, detail::tvec3<T>(T(viewport[2]) / delta.x, T(viewport[3]) / delta.y, T(1)));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x4<T> lookAt(
|
||||
const detail::tvec3<T>& eye,
|
||||
const detail::tvec3<T>& center,
|
||||
const detail::tvec3<T>& up)
|
||||
{
|
||||
detail::tvec3<T> f = normalize(center - eye);
|
||||
detail::tvec3<T> u = normalize(up);
|
||||
detail::tvec3<T> s = normalize(cross(f, u));
|
||||
u = cross(s, f);
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> lookAt
|
||||
(
|
||||
detail::tvec3<T> const & eye,
|
||||
detail::tvec3<T> const & center,
|
||||
detail::tvec3<T> const & up
|
||||
)
|
||||
{
|
||||
detail::tvec3<T> f = normalize(center - eye);
|
||||
detail::tvec3<T> u = normalize(up);
|
||||
detail::tvec3<T> s = normalize(cross(f, u));
|
||||
u = cross(s, f);
|
||||
|
||||
detail::tmat4x4<T> Result(1);
|
||||
Result[0][0] = s.x;
|
||||
Result[1][0] = s.y;
|
||||
Result[2][0] = s.z;
|
||||
Result[0][1] = u.x;
|
||||
Result[1][1] = u.y;
|
||||
Result[2][1] = u.z;
|
||||
Result[0][2] =-f.x;
|
||||
Result[1][2] =-f.y;
|
||||
Result[2][2] =-f.z;
|
||||
/* Test this instead of translate3D
|
||||
Result[3][0] =-dot(s, eye);
|
||||
Result[3][1] =-dot(y, eye);
|
||||
Result[3][2] = dot(f, eye);
|
||||
*/
|
||||
return gtc::matrix_transform::translate(Result, -eye);
|
||||
}
|
||||
}//namespace matrix_transform
|
||||
}//namespace gtc
|
||||
detail::tmat4x4<T> Result(1);
|
||||
Result[0][0] = s.x;
|
||||
Result[1][0] = s.y;
|
||||
Result[2][0] = s.z;
|
||||
Result[0][1] = u.x;
|
||||
Result[1][1] = u.y;
|
||||
Result[2][1] = u.z;
|
||||
Result[0][2] =-f.x;
|
||||
Result[1][2] =-f.y;
|
||||
Result[2][2] =-f.z;
|
||||
Result[3][0] =-dot(s, eye);
|
||||
Result[3][1] =-dot(u, eye);
|
||||
Result[3][2] = dot(f, eye);
|
||||
return Result;
|
||||
}
|
||||
}//namespace glm
|
||||
|
||||
@@ -1,235 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-05-21
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/quaternion.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Dependency:
|
||||
// - GLM core
|
||||
// - GLM_GTC_half_float
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// ToDo:
|
||||
// - Study constructors with angles and axis
|
||||
// - Study constructors with vec3 that are the imaginary component of quaternion
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_gtc_quaternion
|
||||
#define glm_gtc_quaternion
|
||||
|
||||
// Dependency:
|
||||
#include "../glm.hpp"
|
||||
#include "../gtc/half_float.hpp"
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(glm_ext))
|
||||
# pragma message("GLM: GLM_GTC_quaternion extension included")
|
||||
#endif
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
bool main_gtc_quaternion();
|
||||
}//namespace test
|
||||
|
||||
namespace detail
|
||||
{
|
||||
//! \brief Template for quaternion.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
/// \ingroup gtc_quaternion
|
||||
template <typename T>
|
||||
struct tquat// : public genType<T, tquat>
|
||||
{
|
||||
typedef T value_type;
|
||||
|
||||
public:
|
||||
value_type x, y, z, w;
|
||||
|
||||
// Constructors
|
||||
tquat();
|
||||
explicit tquat(
|
||||
value_type const & s,
|
||||
tvec3<T> const & v);
|
||||
explicit tquat(
|
||||
value_type const & w,
|
||||
value_type const & x,
|
||||
value_type const & y,
|
||||
value_type const & z);
|
||||
|
||||
// Convertions
|
||||
//explicit tquat(valType const & pitch, valType const & yaw, valType const & roll);
|
||||
//! pitch, yaw, roll
|
||||
explicit tquat(
|
||||
tvec3<T> const & eulerAngles);
|
||||
explicit tquat(
|
||||
tmat3x3<T> const & m);
|
||||
explicit tquat(
|
||||
tmat4x4<T> const & m);
|
||||
|
||||
// Accesses
|
||||
value_type & operator[](int i);
|
||||
value_type const & operator[](int i) const;
|
||||
|
||||
// Operators
|
||||
tquat<T> & operator*=(value_type const & s);
|
||||
tquat<T> & operator/=(value_type const & s);
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
detail::tquat<T> operator- (
|
||||
detail::tquat<T> const & q);
|
||||
|
||||
template <typename T>
|
||||
detail::tquat<T> operator* (
|
||||
detail::tquat<T> const & q,
|
||||
detail::tquat<T> const & p);
|
||||
|
||||
template <typename T>
|
||||
detail::tvec3<T> operator* (
|
||||
detail::tquat<T> const & q,
|
||||
detail::tvec3<T> const & v);
|
||||
|
||||
template <typename T>
|
||||
detail::tvec3<T> operator* (
|
||||
detail::tvec3<T> const & v,
|
||||
detail::tquat<T> const & q);
|
||||
|
||||
template <typename T>
|
||||
detail::tvec4<T> operator* (
|
||||
detail::tquat<T> const & q,
|
||||
detail::tvec4<T> const & v);
|
||||
|
||||
template <typename T>
|
||||
detail::tvec4<T> operator* (
|
||||
detail::tvec4<T> const & v,
|
||||
detail::tquat<T> const & q);
|
||||
|
||||
template <typename T>
|
||||
detail::tquat<T> operator* (
|
||||
detail::tquat<T> const & q,
|
||||
typename detail::tquat<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
detail::tquat<T> operator* (
|
||||
typename detail::tquat<T>::value_type const & s,
|
||||
detail::tquat<T> const & q);
|
||||
|
||||
template <typename T>
|
||||
detail::tquat<T> operator/ (
|
||||
detail::tquat<T> const & q,
|
||||
typename detail::tquat<T>::value_type const & s);
|
||||
|
||||
} //namespace detail
|
||||
|
||||
namespace gtc{
|
||||
//! GLM_GTC_quaternion extension: Quaternion types and functions
|
||||
namespace quaternion
|
||||
{
|
||||
/// \addtogroup gtc_quaternion
|
||||
///@{
|
||||
|
||||
//! Returns the length of the quaternion x.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
template <typename T>
|
||||
typename detail::tquat<T>::value_type length(
|
||||
detail::tquat<T> const & q);
|
||||
|
||||
//! Returns the normalized quaternion of from x.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
template <typename T>
|
||||
detail::tquat<T> normalize(
|
||||
detail::tquat<T> const & q);
|
||||
|
||||
//! Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
template <typename T>
|
||||
typename detail::tquat<T>::value_type dot(
|
||||
detail::tquat<T> const & q1,
|
||||
detail::tquat<T> const & q2);
|
||||
|
||||
//! Returns the cross product of q1 and q2.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
template <typename T>
|
||||
GLM_DEPRECATED detail::tquat<T> cross(
|
||||
detail::tquat<T> const & q1,
|
||||
detail::tquat<T> const & q2);
|
||||
|
||||
//! Returns a SLERP interpolated quaternion of x and y according a.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
template <typename T>
|
||||
detail::tquat<T> mix(
|
||||
detail::tquat<T> const & x,
|
||||
detail::tquat<T> const & y,
|
||||
typename detail::tquat<T>::value_type const & a);
|
||||
|
||||
//! Returns the q conjugate.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
template <typename T>
|
||||
detail::tquat<T> conjugate(
|
||||
detail::tquat<T> const & q);
|
||||
|
||||
//! Returns the q inverse.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
template <typename T>
|
||||
detail::tquat<T> inverse(
|
||||
detail::tquat<T> const & q);
|
||||
|
||||
//! Rotates a quaternion from an vector of 3 components axis and an angle expressed in degrees.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
template <typename T>
|
||||
detail::tquat<T> rotate(
|
||||
detail::tquat<T> const & q,
|
||||
typename detail::tquat<T>::value_type const & angle,
|
||||
detail::tvec3<T> const & v);
|
||||
|
||||
//! Converts a quaternion to a 3 * 3 matrix.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
template <typename T>
|
||||
detail::tmat3x3<T> mat3_cast(
|
||||
detail::tquat<T> const & x);
|
||||
|
||||
//! Converts a quaternion to a 4 * 4 matrix.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> mat4_cast(
|
||||
detail::tquat<T> const & x);
|
||||
|
||||
//! Converts a 3 * 3 matrix to a quaternion.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
template <typename T>
|
||||
detail::tquat<T> quat_cast(
|
||||
detail::tmat3x3<T> const & x);
|
||||
|
||||
//! Converts a 4 * 4 matrix to a quaternion.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
template <typename T>
|
||||
detail::tquat<T> quat_cast(
|
||||
detail::tmat4x4<T> const & x);
|
||||
|
||||
//! Quaternion of floating-point numbers.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
typedef detail::tquat<float> quat;
|
||||
|
||||
//! Quaternion of half-precision floating-point numbers.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
typedef detail::tquat<detail::thalf> hquat;
|
||||
|
||||
//! Quaternion of single-precision floating-point numbers.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
typedef detail::tquat<float> fquat;
|
||||
|
||||
//! Quaternion of double-precision floating-point numbers.
|
||||
//! From GLM_GTC_quaternion extension.
|
||||
typedef detail::tquat<double> dquat;
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace quaternion
|
||||
}//namespace gtc
|
||||
} //namespace glm
|
||||
|
||||
#include "quaternion.inl"
|
||||
|
||||
namespace glm{using namespace gtc::quaternion;}
|
||||
|
||||
#endif//glm_gtc_quaternion
|
||||
@@ -1,557 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-05-21
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/quaternion.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <limits>
|
||||
|
||||
namespace glm{
|
||||
namespace detail{
|
||||
|
||||
template <typename T>
|
||||
inline tquat<T>::tquat() :
|
||||
x(0),
|
||||
y(0),
|
||||
z(0),
|
||||
w(1)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
inline tquat<T>::tquat
|
||||
(
|
||||
value_type const & s,
|
||||
tvec3<T> const & v
|
||||
) :
|
||||
x(v.x),
|
||||
y(v.y),
|
||||
z(v.z),
|
||||
w(s)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
inline tquat<T>::tquat
|
||||
(
|
||||
value_type const & w,
|
||||
value_type const & x,
|
||||
value_type const & y,
|
||||
value_type const & z
|
||||
) :
|
||||
x(x),
|
||||
y(y),
|
||||
z(z),
|
||||
w(w)
|
||||
{}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// tquat conversions
|
||||
|
||||
//template <typename valType>
|
||||
//inline tquat<valType>::tquat
|
||||
//(
|
||||
// valType const & pitch,
|
||||
// valType const & yaw,
|
||||
// valType const & roll
|
||||
//)
|
||||
//{
|
||||
// tvec3<valType> eulerAngle(pitch * valType(0.5), yaw * valType(0.5), roll * valType(0.5));
|
||||
// tvec3<valType> c = glm::cos(eulerAngle * valType(0.5));
|
||||
// tvec3<valType> s = glm::sin(eulerAngle * valType(0.5));
|
||||
//
|
||||
// this->w = c.x * c.y * c.z + s.x * s.y * s.z;
|
||||
// this->x = s.x * c.y * c.z - c.x * s.y * s.z;
|
||||
// this->y = c.x * s.y * c.z + s.x * c.y * s.z;
|
||||
// this->z = c.x * c.y * s.z - s.x * s.y * c.z;
|
||||
//}
|
||||
|
||||
template <typename T>
|
||||
inline tquat<T>::tquat
|
||||
(
|
||||
tvec3<T> const & eulerAngle
|
||||
)
|
||||
{
|
||||
tvec3<T> c = glm::cos(eulerAngle * value_type(0.5));
|
||||
tvec3<T> s = glm::sin(eulerAngle * value_type(0.5));
|
||||
|
||||
this->w = c.x * c.y * c.z + s.x * s.y * s.z;
|
||||
this->x = s.x * c.y * c.z - c.x * s.y * s.z;
|
||||
this->y = c.x * s.y * c.z + s.x * c.y * s.z;
|
||||
this->z = c.x * c.y * s.z - s.x * s.y * c.z;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tquat<T>::tquat
|
||||
(
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
*this = toQuat(m);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tquat<T>::tquat
|
||||
(
|
||||
tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
*this = toQuat(m);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// tquat<T> accesses
|
||||
|
||||
template <typename T>
|
||||
inline typename tquat<T>::value_type & tquat<T>::operator [] (int i)
|
||||
{
|
||||
return (&x)[i];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename tquat<T>::value_type const & tquat<T>::operator [] (int i) const
|
||||
{
|
||||
return (&x)[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// tquat<valType> operators
|
||||
|
||||
template <typename T>
|
||||
inline tquat<T> & tquat<T>::operator *=
|
||||
(
|
||||
value_type const & s
|
||||
)
|
||||
{
|
||||
this->w *= s;
|
||||
this->x *= s;
|
||||
this->y *= s;
|
||||
this->z *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline tquat<T> & tquat<T>::operator /=
|
||||
(
|
||||
value_type const & s
|
||||
)
|
||||
{
|
||||
this->w /= s;
|
||||
this->x /= s;
|
||||
this->y /= s;
|
||||
this->z /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// tquat<valType> external operators
|
||||
|
||||
template <typename T>
|
||||
inline detail::tquat<T> operator-
|
||||
(
|
||||
detail::tquat<T> const & q
|
||||
)
|
||||
{
|
||||
return detail::tquat<T>(-q.w, -q.x, -q.y, -q.z);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tquat<T> operator*
|
||||
(
|
||||
detail::tquat<T> const & q,
|
||||
detail::tquat<T> const & p
|
||||
)
|
||||
{
|
||||
return detail::tquat<T>(
|
||||
q.w * p.w - q.x * p.x - q.y * p.y - q.z * p.z,
|
||||
q.w * p.x + q.x * p.w + q.y * p.z - q.z * p.y,
|
||||
q.w * p.y + q.y * p.w + q.z * p.x - q.x * p.z,
|
||||
q.w * p.z + q.z * p.w + q.x * p.y - q.y * p.x);
|
||||
}
|
||||
|
||||
// Transformation
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> operator*
|
||||
(
|
||||
detail::tquat<T> const & q,
|
||||
detail::tvec3<T> const & v
|
||||
)
|
||||
{
|
||||
typename detail::tquat<T>::value_type Two(2);
|
||||
|
||||
detail::tvec3<T> uv, uuv;
|
||||
detail::tvec3<T> QuatVector(q.x, q.y, q.z);
|
||||
uv = glm::cross(QuatVector, v);
|
||||
uuv = glm::cross(QuatVector, uv);
|
||||
uv *= (Two * q.w);
|
||||
uuv *= Two;
|
||||
|
||||
return v + uv + uuv;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec3<T> operator*
|
||||
(
|
||||
detail::tvec3<T> const & v,
|
||||
detail::tquat<T> const & q
|
||||
)
|
||||
{
|
||||
return gtc::quaternion::inverse(q) * v;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> operator*
|
||||
(
|
||||
detail::tquat<T> const & q,
|
||||
detail::tvec4<T> const & v
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(q * detail::tvec3<T>(v), v.w);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tvec4<T> operator*
|
||||
(
|
||||
detail::tvec4<T> const & v,
|
||||
detail::tquat<T> const & q
|
||||
)
|
||||
{
|
||||
return gtc::quaternion::inverse(q) * v;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tquat<T> operator*
|
||||
(
|
||||
detail::tquat<T> const & q,
|
||||
typename detail::tquat<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return detail::tquat<T>(
|
||||
q.w * s, q.x * s, q.y * s, q.z * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tquat<T> operator*
|
||||
(
|
||||
typename detail::tquat<T>::value_type const & s,
|
||||
detail::tquat<T> const & q
|
||||
)
|
||||
{
|
||||
return q * s;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tquat<T> operator/
|
||||
(
|
||||
detail::tquat<T> const & q,
|
||||
typename detail::tquat<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return detail::tquat<T>(
|
||||
q.w / s, q.x / s, q.y / s, q.z / s);
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Boolean operators
|
||||
|
||||
template <typename T>
|
||||
inline bool operator==
|
||||
(
|
||||
detail::tquat<T> const & q1,
|
||||
detail::tquat<T> const & q2
|
||||
)
|
||||
{
|
||||
return (q1.x == q2.x) && (q1.y == q2.y) && (q1.z == q2.z) && (q1.w == q2.w);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline bool operator!=
|
||||
(
|
||||
detail::tquat<T> const & q1,
|
||||
detail::tquat<T> const & q2
|
||||
)
|
||||
{
|
||||
return (q1.x != q2.x) || (q1.y != q2.y) || (q1.z != q2.z) || (q1.w != q2.w);
|
||||
}
|
||||
|
||||
}//namespace detail
|
||||
|
||||
namespace gtc{
|
||||
namespace quaternion{
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
template <typename T>
|
||||
inline typename detail::tquat<T>::value_type length
|
||||
(
|
||||
detail::tquat<T> const & q
|
||||
)
|
||||
{
|
||||
return glm::sqrt(dot(q, q));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tquat<T> normalize
|
||||
(
|
||||
detail::tquat<T> const & q
|
||||
)
|
||||
{
|
||||
typename detail::tquat<T>::value_type len = length(q);
|
||||
if(len <= typename detail::tquat<T>::value_type(0)) // Problem
|
||||
return detail::tquat<T>(1, 0, 0, 0);
|
||||
typename detail::tquat<T>::value_type oneOverLen = typename detail::tquat<T>::value_type(1) / len;
|
||||
return detail::tquat<T>(q.w * oneOverLen, q.x * oneOverLen, q.y * oneOverLen, q.z * oneOverLen);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline typename detail::tquat<T>::value_type dot
|
||||
(
|
||||
detail::tquat<T> const & q1,
|
||||
detail::tquat<T> const & q2
|
||||
)
|
||||
{
|
||||
return q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tquat<T> cross
|
||||
(
|
||||
detail::tquat<T> const & q1,
|
||||
detail::tquat<T> const & q2
|
||||
)
|
||||
{
|
||||
return detail::tquat<T>(
|
||||
q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z,
|
||||
q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y,
|
||||
q1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z,
|
||||
q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tquat<T> mix
|
||||
(
|
||||
detail::tquat<T> const & x,
|
||||
detail::tquat<T> const & y,
|
||||
typename detail::tquat<T>::value_type const & a
|
||||
)
|
||||
{
|
||||
if(a <= typename detail::tquat<T>::value_type(0)) return x;
|
||||
if(a >= typename detail::tquat<T>::value_type(1)) return y;
|
||||
|
||||
float fCos = dot(x, y);
|
||||
detail::tquat<T> y2(y); //BUG!!! tquat<T> y2;
|
||||
if(fCos < typename detail::tquat<T>::value_type(0))
|
||||
{
|
||||
y2 = -y;
|
||||
fCos = -fCos;
|
||||
}
|
||||
|
||||
//if(fCos > 1.0f) // problem
|
||||
float k0, k1;
|
||||
if(fCos > typename detail::tquat<T>::value_type(0.9999))
|
||||
{
|
||||
k0 = typename detail::tquat<T>::value_type(1) - a;
|
||||
k1 = typename detail::tquat<T>::value_type(0) + a; //BUG!!! 1.0f + a;
|
||||
}
|
||||
else
|
||||
{
|
||||
typename detail::tquat<T>::value_type fSin = sqrt(T(1) - fCos * fCos);
|
||||
typename detail::tquat<T>::value_type fAngle = atan(fSin, fCos);
|
||||
typename detail::tquat<T>::value_type fOneOverSin = T(1) / fSin;
|
||||
k0 = sin((typename detail::tquat<T>::value_type(1) - a) * fAngle) * fOneOverSin;
|
||||
k1 = sin((typename detail::tquat<T>::value_type(0) + a) * fAngle) * fOneOverSin;
|
||||
}
|
||||
|
||||
return detail::tquat<T>(
|
||||
k0 * x.w + k1 * y2.w,
|
||||
k0 * x.x + k1 * y2.x,
|
||||
k0 * x.y + k1 * y2.y,
|
||||
k0 * x.z + k1 * y2.z);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tquat<T> mix2
|
||||
(
|
||||
detail::tquat<T> const & x,
|
||||
detail::tquat<T> const & y,
|
||||
T const & a
|
||||
)
|
||||
{
|
||||
bool flip = false;
|
||||
if(a <= T(0)) return x;
|
||||
if(a >= T(1)) return y;
|
||||
|
||||
T cos_t = dot(x, y);
|
||||
if(cos_t < T(0))
|
||||
{
|
||||
cos_t = -cos_t;
|
||||
flip = true;
|
||||
}
|
||||
|
||||
T alpha(0), beta(0);
|
||||
|
||||
if(T(1) - cos_t < 1e-7)
|
||||
beta = T(1) - alpha;
|
||||
else
|
||||
{
|
||||
T theta = acos(cos_t);
|
||||
T sin_t = sin(theta);
|
||||
beta = sin(theta * (T(1) - alpha)) / sin_t;
|
||||
alpha = sin(alpha * theta) / sin_t;
|
||||
}
|
||||
|
||||
if(flip)
|
||||
alpha = -alpha;
|
||||
|
||||
return normalize(beta * x + alpha * y);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tquat<T> conjugate
|
||||
(
|
||||
detail::tquat<T> const & q
|
||||
)
|
||||
{
|
||||
return detail::tquat<T>(q.w, -q.x, -q.y, -q.z);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tquat<T> inverse
|
||||
(
|
||||
detail::tquat<T> const & q
|
||||
)
|
||||
{
|
||||
return gtc::quaternion::conjugate(q) / gtc::quaternion::length(q);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tquat<T> rotate
|
||||
(
|
||||
detail::tquat<T> const & q,
|
||||
typename detail::tquat<T>::value_type const & angle,
|
||||
detail::tvec3<T> const & v
|
||||
)
|
||||
{
|
||||
detail::tvec3<T> Tmp = v;
|
||||
|
||||
// Axis of rotation must be normalised
|
||||
typename detail::tquat<T>::value_type len = glm::core::function::geometric::length(Tmp);
|
||||
if(abs(len - typename detail::tquat<T>::value_type(1)) > typename detail::tquat<T>::value_type(0.001))
|
||||
{
|
||||
T oneOverLen = T(1) / len;
|
||||
Tmp.x *= oneOverLen;
|
||||
Tmp.y *= oneOverLen;
|
||||
Tmp.z *= oneOverLen;
|
||||
}
|
||||
|
||||
typename detail::tquat<T>::value_type AngleRad = radians(angle);
|
||||
typename detail::tquat<T>::value_type fSin = sin(AngleRad * T(0.5));
|
||||
|
||||
return gtc::quaternion::cross(q, detail::tquat<T>(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat3x3<T> mat3_cast
|
||||
(
|
||||
detail::tquat<T> const & q
|
||||
)
|
||||
{
|
||||
detail::tmat3x3<T> Result(typename detail::tquat<T>::value_type(1));
|
||||
Result[0][0] = 1 - 2 * q.y * q.y - 2 * q.z * q.z;
|
||||
Result[0][1] = 2 * q.x * q.y + 2 * q.w * q.z;
|
||||
Result[0][2] = 2 * q.x * q.z - 2 * q.w * q.y;
|
||||
|
||||
Result[1][0] = 2 * q.x * q.y - 2 * q.w * q.z;
|
||||
Result[1][1] = 1 - 2 * q.x * q.x - 2 * q.z * q.z;
|
||||
Result[1][2] = 2 * q.y * q.z + 2 * q.w * q.x;
|
||||
|
||||
Result[2][0] = 2 * q.x * q.z + 2 * q.w * q.y;
|
||||
Result[2][1] = 2 * q.y * q.z - 2 * q.w * q.x;
|
||||
Result[2][2] = 1 - 2 * q.x * q.x - 2 * q.y * q.y;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tmat4x4<T> mat4_cast
|
||||
(
|
||||
detail::tquat<T> const & q
|
||||
)
|
||||
{
|
||||
return detail::tmat4x4<T>(mat3_cast(q));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tquat<T> quat_cast
|
||||
(
|
||||
detail::tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
typename detail::tquat<T>::value_type fourXSquaredMinus1 = m[0][0] - m[1][1] - m[2][2];
|
||||
typename detail::tquat<T>::value_type fourYSquaredMinus1 = m[1][1] - m[0][0] - m[2][2];
|
||||
typename detail::tquat<T>::value_type fourZSquaredMinus1 = m[2][2] - m[0][0] - m[1][1];
|
||||
typename detail::tquat<T>::value_type fourWSquaredMinus1 = m[0][0] + m[1][1] + m[2][2];
|
||||
|
||||
int biggestIndex = 0;
|
||||
typename detail::tquat<T>::value_type fourBiggestSquaredMinus1 = fourWSquaredMinus1;
|
||||
if(fourXSquaredMinus1 > fourBiggestSquaredMinus1)
|
||||
{
|
||||
fourBiggestSquaredMinus1 = fourXSquaredMinus1;
|
||||
biggestIndex = 1;
|
||||
}
|
||||
if(fourYSquaredMinus1 > fourBiggestSquaredMinus1)
|
||||
{
|
||||
fourBiggestSquaredMinus1 = fourYSquaredMinus1;
|
||||
biggestIndex = 2;
|
||||
}
|
||||
if(fourZSquaredMinus1 > fourBiggestSquaredMinus1)
|
||||
{
|
||||
fourBiggestSquaredMinus1 = fourZSquaredMinus1;
|
||||
biggestIndex = 3;
|
||||
}
|
||||
|
||||
typename detail::tquat<T>::value_type biggestVal = sqrt(fourBiggestSquaredMinus1 + typename detail::tquat<T>::value_type(1)) * typename detail::tquat<T>::value_type(0.5);
|
||||
typename detail::tquat<T>::value_type mult = typename detail::tquat<T>::value_type(0.25) / biggestVal;
|
||||
|
||||
detail::tquat<T> Result;
|
||||
switch(biggestIndex)
|
||||
{
|
||||
case 0:
|
||||
Result.w = biggestVal;
|
||||
Result.x = (m[1][2] - m[2][1]) * mult;
|
||||
Result.y = (m[2][0] - m[0][2]) * mult;
|
||||
Result.z = (m[0][1] - m[1][0]) * mult;
|
||||
break;
|
||||
case 1:
|
||||
Result.w = (m[1][2] - m[2][1]) * mult;
|
||||
Result.x = biggestVal;
|
||||
Result.y = (m[0][1] + m[1][0]) * mult;
|
||||
Result.z = (m[2][0] + m[0][2]) * mult;
|
||||
break;
|
||||
case 2:
|
||||
Result.w = (m[2][0] - m[0][2]) * mult;
|
||||
Result.x = (m[0][1] + m[1][0]) * mult;
|
||||
Result.y = biggestVal;
|
||||
Result.z = (m[1][2] + m[2][1]) * mult;
|
||||
break;
|
||||
case 3:
|
||||
Result.w = (m[0][1] - m[1][0]) * mult;
|
||||
Result.x = (m[2][0] + m[0][2]) * mult;
|
||||
Result.y = (m[1][2] + m[2][1]) * mult;
|
||||
Result.z = biggestVal;
|
||||
break;
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tquat<T> quat_cast
|
||||
(
|
||||
detail::tmat4x4<T> const & m4
|
||||
)
|
||||
{
|
||||
return quat_cast(detail::tmat3x3<T>(m4));
|
||||
}
|
||||
|
||||
}//namespace quaternion
|
||||
}//namespace gtc
|
||||
}//namespace glm
|
||||
@@ -1,357 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-02-20
|
||||
// Updated : 2010-02-20
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/swizzle.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Dependency:
|
||||
// - GLM core
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_gtc_swizzle
|
||||
#define glm_gtc_swizzle
|
||||
|
||||
// Dependency:
|
||||
#include "../glm.hpp"
|
||||
#include "../gtc/type_precision.hpp"
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(glm_ext))
|
||||
# pragma message("GLM: GLM_GTC_swizzle extension included")
|
||||
#endif
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_gtc_swizzle();
|
||||
}//namespace test
|
||||
|
||||
namespace gtc{
|
||||
//! GLM_GTC_swizzle extension
|
||||
namespace swizzle
|
||||
{
|
||||
using namespace gtc::half_float;
|
||||
|
||||
template <typename T, template <typename> class vecType>
|
||||
T const & swizzle(
|
||||
vecType<T> const & v,
|
||||
comp x);
|
||||
|
||||
template <typename T, template <typename> class vecType>
|
||||
detail::tvec2<T> const & swizzle(
|
||||
vecType<T> const & v,
|
||||
comp x, comp y);
|
||||
|
||||
template <typename T, template <typename> class vecType>
|
||||
detail::tvec3<T> const & swizzle(
|
||||
vecType<T> const & v,
|
||||
comp x, comp y, comp z);
|
||||
|
||||
template <typename T, template <typename> class vecType>
|
||||
detail::tvec4<T> const & swizzle(
|
||||
vecType<T> const & v,
|
||||
comp x, comp y, comp z, comp w);
|
||||
|
||||
template <typename T, template <typename> class vecType>
|
||||
T & swizzle(
|
||||
vecType<T> & v,
|
||||
comp x);
|
||||
|
||||
template <typename T, template <typename> class vecType>
|
||||
detail::tref2<T> swizzle(
|
||||
vecType<T> & v,
|
||||
comp x, comp y);
|
||||
|
||||
template <typename T, template <typename> class vecType>
|
||||
detail::tref3<T> swizzle(
|
||||
vecType<T> & v,
|
||||
comp x, comp y, comp z);
|
||||
|
||||
template <typename T, template <typename> class vecType>
|
||||
detail::tref4<T> swizzle(
|
||||
vecType<T> & v,
|
||||
comp x, comp y, comp z, comp w);
|
||||
|
||||
# define static_swizzle1(TYPE, SIZE) \
|
||||
template <comp x> \
|
||||
inline TYPE swizzle(detail::tvec##SIZE<TYPE> const & v) \
|
||||
{return v[x];} \
|
||||
\
|
||||
template <comp x> \
|
||||
inline TYPE& swizzle(detail::tvec##SIZE<TYPE> & v) \
|
||||
{return v[x];}
|
||||
|
||||
static_swizzle1(detail::float16, 2)
|
||||
static_swizzle1(detail::float16, 3)
|
||||
static_swizzle1(detail::float16, 4)
|
||||
static_swizzle1(detail::float32, 2)
|
||||
static_swizzle1(detail::float32, 3)
|
||||
static_swizzle1(detail::float32, 4)
|
||||
static_swizzle1(detail::float64, 2)
|
||||
static_swizzle1(detail::float64, 3)
|
||||
static_swizzle1(detail::float64, 4)
|
||||
|
||||
static_swizzle1(detail::int8, 2)
|
||||
static_swizzle1(detail::int8, 3)
|
||||
static_swizzle1(detail::int8, 4)
|
||||
static_swizzle1(detail::int16, 2)
|
||||
static_swizzle1(detail::int16, 3)
|
||||
static_swizzle1(detail::int16, 4)
|
||||
static_swizzle1(detail::int32, 2)
|
||||
static_swizzle1(detail::int32, 3)
|
||||
static_swizzle1(detail::int32, 4)
|
||||
static_swizzle1(detail::int64, 2)
|
||||
static_swizzle1(detail::int64, 3)
|
||||
static_swizzle1(detail::int64, 4)
|
||||
|
||||
static_swizzle1(detail::uint8, 2)
|
||||
static_swizzle1(detail::uint8, 3)
|
||||
static_swizzle1(detail::uint8, 4)
|
||||
static_swizzle1(detail::uint16, 2)
|
||||
static_swizzle1(detail::uint16, 3)
|
||||
static_swizzle1(detail::uint16, 4)
|
||||
static_swizzle1(detail::uint32, 2)
|
||||
static_swizzle1(detail::uint32, 3)
|
||||
static_swizzle1(detail::uint32, 4)
|
||||
static_swizzle1(detail::uint64, 2)
|
||||
static_swizzle1(detail::uint64, 3)
|
||||
static_swizzle1(detail::uint64, 4)
|
||||
|
||||
# define static_swizzle2_const(TYPE) \
|
||||
template <comp x, comp y> \
|
||||
inline TYPE swizzle(TYPE const & v) \
|
||||
{return TYPE(v[x], v[y]);}
|
||||
|
||||
# define static_swizzle3_const(TYPE) \
|
||||
template <comp x, comp y, comp z> \
|
||||
inline TYPE swizzle(TYPE const & v) \
|
||||
{return TYPE(v[x], v[y], v[z]);}
|
||||
|
||||
# define static_swizzle4_const(TYPE) \
|
||||
template <comp x, comp y, comp z, comp w> \
|
||||
inline TYPE swizzle(TYPE const & v) \
|
||||
{return TYPE(v[x], v[y], v[z], v[w]);}
|
||||
/*
|
||||
# define static_swizzle2_const(TYPE, SIZE) \
|
||||
template <comp x, comp y> \
|
||||
inline detail::tvec2<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v) \
|
||||
{return detail::tvec2<TYPE>(v[x], v[y]);}
|
||||
|
||||
# define static_swizzle3_const(TYPE, SIZE) \
|
||||
template <comp x, comp y, comp z> \
|
||||
inline detail::tvec3<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v) \
|
||||
{return detail::tvec3<TYPE>(v[x], v[y], v[z]);}
|
||||
|
||||
# define static_swizzle4_const(TYPE, SIZE) \
|
||||
template <comp x, comp y, comp z, comp w> \
|
||||
inline detail::tvec4<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v) \
|
||||
{return detail::tvec4<TYPE>(v[x], v[y], v[z], v[w]);}
|
||||
*/
|
||||
static_swizzle2_const(glm::f16vec2)
|
||||
static_swizzle2_const(glm::f16vec3)
|
||||
static_swizzle2_const(glm::f16vec4)
|
||||
static_swizzle2_const(glm::f32vec2)
|
||||
static_swizzle2_const(glm::f32vec3)
|
||||
static_swizzle2_const(glm::f32vec4)
|
||||
static_swizzle2_const(glm::f64vec2)
|
||||
static_swizzle2_const(glm::f64vec3)
|
||||
static_swizzle2_const(glm::f64vec4)
|
||||
|
||||
static_swizzle2_const(glm::i8vec2)
|
||||
static_swizzle2_const(glm::i8vec3)
|
||||
static_swizzle2_const(glm::i8vec4)
|
||||
static_swizzle2_const(glm::i16vec2)
|
||||
static_swizzle2_const(glm::i16vec3)
|
||||
static_swizzle2_const(glm::i16vec4)
|
||||
static_swizzle2_const(glm::i32vec2)
|
||||
static_swizzle2_const(glm::i32vec3)
|
||||
static_swizzle2_const(glm::i32vec4)
|
||||
static_swizzle2_const(glm::i64vec2)
|
||||
static_swizzle2_const(glm::i64vec3)
|
||||
static_swizzle2_const(glm::i64vec4)
|
||||
|
||||
static_swizzle2_const(glm::u8vec2)
|
||||
static_swizzle2_const(glm::u8vec3)
|
||||
static_swizzle2_const(glm::u8vec4)
|
||||
static_swizzle2_const(glm::u16vec2)
|
||||
static_swizzle2_const(glm::u16vec3)
|
||||
static_swizzle2_const(glm::u16vec4)
|
||||
static_swizzle2_const(glm::u32vec2)
|
||||
static_swizzle2_const(glm::u32vec3)
|
||||
static_swizzle2_const(glm::u32vec4)
|
||||
static_swizzle2_const(glm::u64vec2)
|
||||
static_swizzle2_const(glm::u64vec3)
|
||||
static_swizzle2_const(glm::u64vec4)
|
||||
|
||||
static_swizzle3_const(glm::f16vec2)
|
||||
static_swizzle3_const(glm::f16vec3)
|
||||
static_swizzle3_const(glm::f16vec4)
|
||||
static_swizzle3_const(glm::f32vec2)
|
||||
static_swizzle3_const(glm::f32vec3)
|
||||
static_swizzle3_const(glm::f32vec4)
|
||||
static_swizzle3_const(glm::f64vec2)
|
||||
static_swizzle3_const(glm::f64vec3)
|
||||
static_swizzle3_const(glm::f64vec4)
|
||||
|
||||
static_swizzle3_const(glm::i8vec2)
|
||||
static_swizzle3_const(glm::i8vec3)
|
||||
static_swizzle3_const(glm::i8vec4)
|
||||
static_swizzle3_const(glm::i16vec2)
|
||||
static_swizzle3_const(glm::i16vec3)
|
||||
static_swizzle3_const(glm::i16vec4)
|
||||
static_swizzle3_const(glm::i32vec2)
|
||||
static_swizzle3_const(glm::i32vec3)
|
||||
static_swizzle3_const(glm::i32vec4)
|
||||
static_swizzle3_const(glm::i64vec2)
|
||||
static_swizzle3_const(glm::i64vec3)
|
||||
static_swizzle3_const(glm::i64vec4)
|
||||
|
||||
static_swizzle3_const(glm::u8vec2)
|
||||
static_swizzle3_const(glm::u8vec3)
|
||||
static_swizzle3_const(glm::u8vec4)
|
||||
static_swizzle3_const(glm::u16vec2)
|
||||
static_swizzle3_const(glm::u16vec3)
|
||||
static_swizzle3_const(glm::u16vec4)
|
||||
static_swizzle3_const(glm::u32vec2)
|
||||
static_swizzle3_const(glm::u32vec3)
|
||||
static_swizzle3_const(glm::u32vec4)
|
||||
static_swizzle3_const(glm::u64vec2)
|
||||
static_swizzle3_const(glm::u64vec3)
|
||||
static_swizzle3_const(glm::u64vec4)
|
||||
|
||||
static_swizzle4_const(glm::f16vec2)
|
||||
static_swizzle4_const(glm::f16vec3)
|
||||
static_swizzle4_const(glm::f16vec4)
|
||||
static_swizzle4_const(glm::f32vec2)
|
||||
static_swizzle4_const(glm::f32vec3)
|
||||
static_swizzle4_const(glm::f32vec4)
|
||||
static_swizzle4_const(glm::f64vec2)
|
||||
static_swizzle4_const(glm::f64vec3)
|
||||
static_swizzle4_const(glm::f64vec4)
|
||||
|
||||
static_swizzle4_const(glm::i8vec2)
|
||||
static_swizzle4_const(glm::i8vec3)
|
||||
static_swizzle4_const(glm::i8vec4)
|
||||
static_swizzle4_const(glm::i16vec2)
|
||||
static_swizzle4_const(glm::i16vec3)
|
||||
static_swizzle4_const(glm::i16vec4)
|
||||
static_swizzle4_const(glm::i32vec2)
|
||||
static_swizzle4_const(glm::i32vec3)
|
||||
static_swizzle4_const(glm::i32vec4)
|
||||
static_swizzle4_const(glm::i64vec2)
|
||||
static_swizzle4_const(glm::i64vec3)
|
||||
static_swizzle4_const(glm::i64vec4)
|
||||
|
||||
static_swizzle4_const(glm::u8vec2)
|
||||
static_swizzle4_const(glm::u8vec3)
|
||||
static_swizzle4_const(glm::u8vec4)
|
||||
static_swizzle4_const(glm::u16vec2)
|
||||
static_swizzle4_const(glm::u16vec3)
|
||||
static_swizzle4_const(glm::u16vec4)
|
||||
static_swizzle4_const(glm::u32vec2)
|
||||
static_swizzle4_const(glm::u32vec3)
|
||||
static_swizzle4_const(glm::u32vec4)
|
||||
static_swizzle4_const(glm::u64vec2)
|
||||
static_swizzle4_const(glm::u64vec3)
|
||||
static_swizzle4_const(glm::u64vec4)
|
||||
|
||||
# define static_swizzle2_ref(TYPE) \
|
||||
template <glm::comp x, glm::comp y> \
|
||||
inline glm::detail::tref2<typename TYPE::value_type> swizzle(TYPE & v) \
|
||||
{return glm::detail::tref2<typename TYPE::value_type>(v[x], v[y]);}
|
||||
|
||||
# define static_swizzle3_ref(TYPE) \
|
||||
template <glm::comp x, glm::comp y, glm::comp z> \
|
||||
inline glm::detail::tref3<typename TYPE::value_type> swizzle(TYPE & v) \
|
||||
{return glm::detail::tref3<typename TYPE::value_type>(v[x], v[y], v[z]);}
|
||||
|
||||
# define static_swizzle4_ref(TYPE) \
|
||||
template <glm::comp x, glm::comp y, glm::comp z, glm::comp w> \
|
||||
inline glm::detail::tref4<typename TYPE::value_type> swizzle(TYPE & v) \
|
||||
{return glm::detail::tref4<typename TYPE::value_type>(v[x], v[y], v[z], v[w]);}
|
||||
|
||||
static_swizzle2_ref(glm::f16vec2)
|
||||
static_swizzle2_ref(glm::f16vec3)
|
||||
static_swizzle2_ref(glm::f16vec4)
|
||||
static_swizzle2_ref(glm::f32vec2)
|
||||
static_swizzle2_ref(glm::f32vec3)
|
||||
static_swizzle2_ref(glm::f32vec4)
|
||||
static_swizzle2_ref(glm::f64vec2)
|
||||
static_swizzle2_ref(glm::f64vec3)
|
||||
static_swizzle2_ref(glm::f64vec4)
|
||||
|
||||
static_swizzle2_ref(glm::i8vec2)
|
||||
static_swizzle2_ref(glm::i8vec3)
|
||||
static_swizzle2_ref(glm::i8vec4)
|
||||
static_swizzle2_ref(glm::i16vec2)
|
||||
static_swizzle2_ref(glm::i16vec3)
|
||||
static_swizzle2_ref(glm::i16vec4)
|
||||
static_swizzle2_ref(glm::i32vec2)
|
||||
static_swizzle2_ref(glm::i32vec3)
|
||||
static_swizzle2_ref(glm::i32vec4)
|
||||
static_swizzle2_ref(glm::i64vec2)
|
||||
static_swizzle2_ref(glm::i64vec3)
|
||||
static_swizzle2_ref(glm::i64vec4)
|
||||
|
||||
static_swizzle2_ref(glm::u8vec2)
|
||||
static_swizzle2_ref(glm::u8vec3)
|
||||
static_swizzle2_ref(glm::u8vec4)
|
||||
static_swizzle2_ref(glm::u16vec2)
|
||||
static_swizzle2_ref(glm::u16vec3)
|
||||
static_swizzle2_ref(glm::u16vec4)
|
||||
static_swizzle2_ref(glm::u32vec2)
|
||||
static_swizzle2_ref(glm::u32vec3)
|
||||
static_swizzle2_ref(glm::u32vec4)
|
||||
static_swizzle2_ref(glm::u64vec2)
|
||||
static_swizzle2_ref(glm::u64vec3)
|
||||
static_swizzle2_ref(glm::u64vec4)
|
||||
|
||||
static_swizzle3_ref(glm::f16vec3)
|
||||
static_swizzle3_ref(glm::f16vec4)
|
||||
static_swizzle3_ref(glm::f32vec3)
|
||||
static_swizzle3_ref(glm::f32vec4)
|
||||
static_swizzle3_ref(glm::f64vec3)
|
||||
static_swizzle3_ref(glm::f64vec4)
|
||||
|
||||
static_swizzle3_ref(glm::i8vec3)
|
||||
static_swizzle3_ref(glm::i8vec4)
|
||||
static_swizzle3_ref(glm::i16vec3)
|
||||
static_swizzle3_ref(glm::i16vec4)
|
||||
static_swizzle3_ref(glm::i32vec3)
|
||||
static_swizzle3_ref(glm::i32vec4)
|
||||
static_swizzle3_ref(glm::i64vec3)
|
||||
static_swizzle3_ref(glm::i64vec4)
|
||||
|
||||
static_swizzle3_ref(glm::u8vec3)
|
||||
static_swizzle3_ref(glm::u8vec4)
|
||||
static_swizzle3_ref(glm::u16vec3)
|
||||
static_swizzle3_ref(glm::u16vec4)
|
||||
static_swizzle3_ref(glm::u32vec3)
|
||||
static_swizzle3_ref(glm::u32vec4)
|
||||
static_swizzle3_ref(glm::u64vec3)
|
||||
static_swizzle3_ref(glm::u64vec4)
|
||||
|
||||
static_swizzle4_ref(glm::f16vec4)
|
||||
static_swizzle4_ref(glm::f32vec4)
|
||||
static_swizzle4_ref(glm::f64vec4)
|
||||
|
||||
static_swizzle4_ref(glm::i8vec4)
|
||||
static_swizzle4_ref(glm::i16vec4)
|
||||
static_swizzle4_ref(glm::i32vec4)
|
||||
static_swizzle4_ref(glm::i64vec4)
|
||||
|
||||
static_swizzle4_ref(glm::u8vec4)
|
||||
static_swizzle4_ref(glm::u16vec4)
|
||||
static_swizzle4_ref(glm::u32vec4)
|
||||
static_swizzle4_ref(glm::u64vec4)
|
||||
|
||||
}//namespace swizzle
|
||||
}//namespace gtc
|
||||
}//namespace glm
|
||||
|
||||
#include "swizzle.inl"
|
||||
|
||||
namespace glm{using namespace gtc::swizzle;}
|
||||
|
||||
#endif//glm_gtc_swizzle
|
||||
@@ -1,177 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-01-15
|
||||
// Updated : 2011-01-15
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/swizzle.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Dependency:
|
||||
// - GLM core
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace gtc{
|
||||
namespace swizzle{
|
||||
|
||||
template <typename T, template <typename> class vecType>
|
||||
inline T swizzle
|
||||
(
|
||||
vecType<T> const & v,
|
||||
comp x
|
||||
)
|
||||
{
|
||||
assert(int(x) < int(vecType<T>::value_size));
|
||||
return v[x];
|
||||
}
|
||||
|
||||
template <typename T, template <typename> class vecType>
|
||||
inline detail::tvec2<T> swizzle
|
||||
(
|
||||
vecType<T> const & v,
|
||||
comp x, comp y
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
v[x],
|
||||
v[y]);
|
||||
}
|
||||
|
||||
template <typename T, template <typename> class vecType>
|
||||
inline detail::tvec3<T> swizzle
|
||||
(
|
||||
vecType<T> const & v,
|
||||
comp x, comp y, comp z
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
v[x],
|
||||
v[y],
|
||||
v[z]);
|
||||
}
|
||||
|
||||
template <typename T, template <typename> class vecType>
|
||||
inline detail::tvec4<T> swizzle
|
||||
(
|
||||
vecType<T> const & v,
|
||||
comp x, comp y, comp z, comp w
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(v[x], v[y], v[z], v[w]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline T& swizzle
|
||||
(
|
||||
detail::tvec4<T> & v,
|
||||
comp x
|
||||
)
|
||||
{
|
||||
return v[x];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tref2<T> swizzle
|
||||
(
|
||||
detail::tvec4<T> & v,
|
||||
comp x, comp y
|
||||
)
|
||||
{
|
||||
return detail::tref2<T>(v[x], v[y]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tref3<T> swizzle
|
||||
(
|
||||
detail::tvec4<T> & v,
|
||||
comp x, comp y, comp z
|
||||
)
|
||||
{
|
||||
return detail::tref3<T>(v[x], v[y], v[z]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline detail::tref4<T> swizzle
|
||||
(
|
||||
detail::tvec4<T> & v,
|
||||
comp x, comp y, comp z, comp w
|
||||
)
|
||||
{
|
||||
return detail::tref4<T>(v[x], v[y], v[z], v[w]);
|
||||
}
|
||||
/*
|
||||
template <comp x>
|
||||
inline float& swizzle
|
||||
(
|
||||
detail::tvec4<float> & v
|
||||
)
|
||||
{
|
||||
return v[x];
|
||||
}
|
||||
|
||||
template <comp x>
|
||||
inline int& swizzle
|
||||
(
|
||||
detail::tvec4<int> & v
|
||||
)
|
||||
{
|
||||
return v[x];
|
||||
}
|
||||
|
||||
template <comp x, comp y>
|
||||
inline detail::tref2<float> swizzle
|
||||
(
|
||||
detail::tvec4<float> & v
|
||||
)
|
||||
{
|
||||
return detail::tref2<float>(v[x], v[y]);
|
||||
}
|
||||
|
||||
template <comp x, comp y>
|
||||
inline detail::tref2<int> swizzle
|
||||
(
|
||||
detail::tvec4<int> & v
|
||||
)
|
||||
{
|
||||
return detail::tref2<int>(v[x], v[y]);
|
||||
}
|
||||
|
||||
template <comp x, comp y, comp z>
|
||||
inline detail::tref3<float> swizzle
|
||||
(
|
||||
detail::tvec4<float> & v
|
||||
)
|
||||
{
|
||||
return detail::tref3<float>(v[x], v[y], v[z]);
|
||||
}
|
||||
|
||||
template <comp x, comp y, comp z>
|
||||
inline detail::tref3<int> swizzle
|
||||
(
|
||||
detail::tvec4<int> & v
|
||||
)
|
||||
{
|
||||
return detail::tref3<int>(v[x], v[y], v[z]);
|
||||
}
|
||||
|
||||
template <comp x, comp y, comp z, comp w>
|
||||
inline detail::tref4<float> swizzle
|
||||
(
|
||||
detail::tvec4<float> & v
|
||||
)
|
||||
{
|
||||
return detail::tref4<float>(v[x], v[y], v[z], v[w]);
|
||||
}
|
||||
|
||||
template <comp x, comp y, comp z, comp w>
|
||||
inline detail::tref4<int> swizzle
|
||||
(
|
||||
detail::tvec4<int> & v
|
||||
)
|
||||
{
|
||||
return detail::tref4<int>(v[x], v[y], v[z], v[w]);
|
||||
}
|
||||
*/
|
||||
}//namespace swizzle
|
||||
}//namespace gtc
|
||||
}//namespace glm
|
||||
@@ -1,226 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-06-04
|
||||
// Updated : 2009-06-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/type_precision.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Dependency:
|
||||
// - GLM core
|
||||
// - GLM_GTC_half
|
||||
// - GLM_GTC_quaternion
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_gtc_type_precision
|
||||
#define glm_gtc_type_precision
|
||||
|
||||
// Dependency:
|
||||
#include "../glm.hpp"
|
||||
#include "../gtc/half_float.hpp"
|
||||
#include "../gtc/quaternion.hpp"
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(glm_ext))
|
||||
# pragma message("GLM: GLM_GTC_type_precision extension included")
|
||||
#endif
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
bool main_gtc_type_precision();
|
||||
}//namespace test
|
||||
|
||||
namespace gtc{
|
||||
//! GLM_GTC_type_precision extension: Defined types with specific size.
|
||||
namespace type_precision
|
||||
{
|
||||
///////////////////////////
|
||||
// Dependences
|
||||
|
||||
using namespace gtc::half_float;
|
||||
using namespace gtc::quaternion;
|
||||
|
||||
///////////////////////////
|
||||
// Signed int vector types
|
||||
|
||||
/// \addtogroup gtc_type_precision
|
||||
///@{
|
||||
|
||||
typedef detail::int8 int8; //!< \brief 8bit signed integer. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::int16 int16; //!< \brief 16bit signed integer. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::int32 int32; //!< \brief 32bit signed integer. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::int64 int64; //!< \brief 64bit signed integer. (from GLM_GTC_type_precision extension)
|
||||
|
||||
typedef int8 i8; //!< \brief 8bit signed integer. (from GLM_GTC_type_precision extension)
|
||||
typedef int16 i16; //!< \brief 16bit signed integer. (from GLM_GTC_type_precision extension)
|
||||
typedef int32 i32; //!< \brief 32bit signed integer. (from GLM_GTC_type_precision extension)
|
||||
typedef int64 i64; //!< \brief 64bit signed integer. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef i8 i8vec1; //!< \brief 8bit signed integer scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec2<i8> i8vec2; //!< \brief 8bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec3<i8> i8vec3; //!< \brief 8bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec4<i8> i8vec4; //!< \brief 8bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef i16 i16vec1; //!< \brief 16bit signed integer scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec2<i16> i16vec2; //!< \brief 16bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec3<i16> i16vec3; //!< \brief 16bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec4<i16> i16vec4; //!< \brief 16bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef i32 i32vec1; //!< \brief 32bit signed integer scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec2<i32> i32vec2; //!< \brief 32bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec3<i32> i32vec3; //!< \brief 32bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec4<i32> i32vec4; //!< \brief 32bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef i64 i64vec1; //!< \brief 32bit signed integer scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec2<i64> i64vec2; //!< \brief 64bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec3<i64> i64vec3; //!< \brief 64bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec4<i64> i64vec4; //!< \brief 64bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension)
|
||||
|
||||
/////////////////////////////
|
||||
// Unsigned int vector types
|
||||
|
||||
typedef detail::uint8 uint8; //!< \brief 8bit unsigned integer. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::uint16 uint16; //!< \brief 16bit unsigned integer. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::uint32 uint32; //!< \brief 32bit unsigned integer. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::uint64 uint64; //!< \brief 64bit unsigned integer. (from GLM_GTC_type_precision extension)
|
||||
|
||||
typedef uint8 u8; //!< \brief 8bit unsigned integer. (from GLM_GTC_type_precision extension)
|
||||
typedef uint16 u16; //!< \brief 16bit unsigned integer. (from GLM_GTC_type_precision extension)
|
||||
typedef uint32 u32; //!< \brief 32bit unsigned integer. (from GLM_GTC_type_precision extension)
|
||||
typedef uint64 u64; //!< \brief 64bit unsigned integer. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef u8 u8vec1; //!< \brief 8bit unsigned integer scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec2<u8> u8vec2; //!< \brief 8bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec3<u8> u8vec3; //!< \brief 8bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec4<u8> u8vec4; //!< \brief 8bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef u16 u16vec1; //!< \brief 16bit unsigned integer scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec2<u16> u16vec2; //!< \brief 16bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec3<u16> u16vec3; //!< \brief 16bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec4<u16> u16vec4; //!< \brief 16bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef u32 u32vec1; //!< \brief 32bit unsigned integer scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec2<u32> u32vec2; //!< \brief 32bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec3<u32> u32vec3; //!< \brief 32bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec4<u32> u32vec4; //!< \brief 32bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef u64 u64vec1; //!< \brief 64bit unsigned integer scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec2<u64> u64vec2; //!< \brief 64bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec3<u64> u64vec3; //!< \brief 64bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec4<u64> u64vec4; //!< \brief 64bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//////////////////////
|
||||
// Float vector types
|
||||
|
||||
typedef detail::float16 float16; //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::float32 float32; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::float64 float64; //!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
|
||||
typedef float16 f16; //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef float32 f32; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef float64 f64; //!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
|
||||
typedef detail::tvec2<float> fvec2; //!< Vector of 2 single-precision floating-point numbers. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec3<float> fvec3; //!< Vector of 3 single-precision floating-point numbers. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec4<float> fvec4; //!< Vector of 4 single-precision floating-point numbers. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef f16 f16vec1; //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec2<f16> f16vec2; //!< \brief Half-precision floating-point vector of 2 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec3<f16> f16vec3; //!< \brief Half-precision floating-point vector of 3 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec4<f16> f16vec4; //!< \brief Half-precision floating-point vector of 4 components. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef f32 f32vec1; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec2<f32> f32vec2; //!< \brief Single-precision floating-point vector of 2 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec3<f32> f32vec3; //!< \brief Single-precision floating-point vector of 3 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec4<f32> f32vec4; //!< \brief Single-precision floating-point vector of 4 components. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef f64 f64vec1; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec2<f64> f64vec2; //!< \brief Double-precision floating-point vector of 2 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec3<f64> f64vec3; //!< \brief Double-precision floating-point vector of 3 components. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tvec4<f64> f64vec4; //!< \brief Double-precision floating-point vector of 4 components. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//////////////////////
|
||||
// Float matrix types
|
||||
|
||||
//typedef f32 fmat1; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x2<f32> fmat2; //!< \brief Single-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x3<f32> fmat3; //!< \brief Single-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x4<f32> fmat4; //!< \brief Single-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef f32 fmat1x1; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x2<f32> fmat2x2; //!< \brief Single-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x3<f32> fmat2x3; //!< \brief Single-precision floating-point 2x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x4<f32> fmat2x4; //!< \brief Single-precision floating-point 2x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x2<f32> fmat3x2; //!< \brief Single-precision floating-point 3x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x3<f32> fmat3x3; //!< \brief Single-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x4<f32> fmat3x4; //!< \brief Single-precision floating-point 3x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x2<f32> fmat4x2; //!< \brief Single-precision floating-point 4x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x3<f32> fmat4x3; //!< \brief Single-precision floating-point 4x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x4<f32> fmat4x4; //!< \brief Single-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef f16 f16mat1; //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x2<f16> f16mat2; //!< \brief Half-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x3<f16> f16mat3; //!< \brief Half-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x4<f16> f16mat4; //!< \brief Half-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef f16 f16mat1x1; //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x2<f16> f16mat2x2; //!< \brief Half-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x3<f16> f16mat2x3; //!< \brief Half-precision floating-point 2x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x4<f16> f16mat2x4; //!< \brief Half-precision floating-point 2x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x2<f16> f16mat3x2; //!< \brief Half-precision floating-point 3x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x3<f16> f16mat3x3; //!< \brief Half-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x4<f16> f16mat3x4; //!< \brief Half-precision floating-point 3x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x2<f16> f16mat4x2; //!< \brief Half-precision floating-point 4x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x3<f16> f16mat4x3; //!< \brief Half-precision floating-point 4x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x4<f16> f16mat4x4; //!< \brief Half-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef f32 f32mat1; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x2<f32> f32mat2; //!< \brief Single-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x3<f32> f32mat3; //!< \brief Single-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x4<f32> f32mat4; //!< \brief Single-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef f32 f32mat1x1; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x2<f32> f32mat2x2; //!< \brief Single-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x3<f32> f32mat2x3; //!< \brief Single-precision floating-point 2x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x4<f32> f32mat2x4; //!< \brief Single-precision floating-point 2x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x2<f32> f32mat3x2; //!< \brief Single-precision floating-point 3x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x3<f32> f32mat3x3; //!< \brief Single-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x4<f32> f32mat3x4; //!< \brief Single-precision floating-point 3x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x2<f32> f32mat4x2; //!< \brief Single-precision floating-point 4x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x3<f32> f32mat4x3; //!< \brief Single-precision floating-point 4x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x4<f32> f32mat4x4; //!< \brief Single-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef f64 f64mat1; //!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x2<f64> f64mat2; //!< \brief Double-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x3<f64> f64mat3; //!< \brief Double-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x4<f64> f64mat4; //!< \brief Double-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//typedef f64 f64mat1x1; //!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x2<f64> f64mat2x2; //!< \brief Double-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x3<f64> f64mat2x3; //!< \brief Double-precision floating-point 2x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat2x4<f64> f64mat2x4; //!< \brief Double-precision floating-point 2x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x2<f64> f64mat3x2; //!< \brief Double-precision floating-point 3x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x3<f64> f64mat3x3; //!< \brief Double-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat3x4<f64> f64mat3x4; //!< \brief Double-precision floating-point 3x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x2<f64> f64mat4x2; //!< \brief Double-precision floating-point 4x2 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x3<f64> f64mat4x3; //!< \brief Double-precision floating-point 4x3 matrix. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tmat4x4<f64> f64mat4x4; //!< \brief Double-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
|
||||
|
||||
//////////////////////////
|
||||
// Float quaternion types
|
||||
|
||||
typedef detail::tquat<f16> f16quat; //!< \brief Half-precision floating-point quaternion. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tquat<f32> f32quat; //!< \brief Single-precision floating-point quaternion. (from GLM_GTC_type_precision extension)
|
||||
typedef detail::tquat<f64> f64quat; //!< \brief Double-precision floating-point quaternion. (from GLM_GTC_type_precision extension)
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace type_precision
|
||||
}//namespace gtc
|
||||
}//namespace glm
|
||||
|
||||
#include "type_precision.inl"
|
||||
|
||||
namespace glm{using namespace gtc::type_precision;}
|
||||
|
||||
#endif//glm_gtc_type_precision
|
||||
@@ -1,13 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-06-14
|
||||
// Updated : 2009-06-14
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/type_precision.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
|
||||
}
|
||||
@@ -1,308 +1,169 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-05-06
|
||||
// Updated : 2010-04-30
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/gtc/type_ptr.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Dependency:
|
||||
// - GLM core
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref gtc_type_ptr
|
||||
/// @file glm/gtc/type_ptr.hpp
|
||||
/// @date 2009-05-06 / 2011-06-05
|
||||
/// @author Christophe Riccio
|
||||
///
|
||||
/// @see core (dependence)
|
||||
/// @see gtc_half_float (dependence)
|
||||
/// @see gtc_quaternion (dependence)
|
||||
///
|
||||
/// @defgroup gtc_type_ptr GLM_GTC_type_ptr
|
||||
/// @ingroup gtc
|
||||
///
|
||||
/// @brief Handles the interaction between pointers and vector, matrix types.
|
||||
///
|
||||
/// This extension defines an overloaded function, glm::value_ptr, which
|
||||
/// takes any of the \ref core_template "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:
|
||||
/// @code
|
||||
/// #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));
|
||||
/// @endcode
|
||||
///
|
||||
/// <glm/gtc/type_ptr.hpp> need to be included to use these functionalities.
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_gtc_type_ptr
|
||||
#define glm_gtc_type_ptr
|
||||
#ifndef GLM_GTC_type_ptr
|
||||
#define GLM_GTC_type_ptr GLM_VERSION
|
||||
|
||||
// Dependency:
|
||||
#include "../glm.hpp"
|
||||
#include "../gtc/half_float.hpp"
|
||||
#include "../gtc/quaternion.hpp"
|
||||
#include <cstring>
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(glm_ext))
|
||||
# pragma message("GLM: GLM_GTC_type_ptr extension included")
|
||||
#endif
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_gtc_type_ptr();
|
||||
}//namespace test
|
||||
{
|
||||
/// @addtogroup gtc_type_ptr
|
||||
/// @{
|
||||
|
||||
/// Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename genType>
|
||||
typename genType::value_type const * value_ptr(genType const & vec);
|
||||
|
||||
namespace gtc{
|
||||
//! GLM_GTC_type_ptr extension: Get access to vectors & matrices value type address.
|
||||
namespace type_ptr{
|
||||
/// Build a vector from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tvec2<T> make_vec2(T const * const ptr);
|
||||
|
||||
/// \addtogroup gtc_type_ptr
|
||||
///@{
|
||||
/// Build a vector from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tvec3<T> make_vec3(T const * const ptr);
|
||||
|
||||
//! Get the const address of the vector content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T const * value_ptr
|
||||
(
|
||||
detail::tvec2<T> const & vec
|
||||
)
|
||||
{
|
||||
return &(vec.x);
|
||||
}
|
||||
/// Build a vector from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tvec4<T> make_vec4(T const * const ptr);
|
||||
|
||||
//! Get the address of the vector content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T * value_ptr
|
||||
(
|
||||
detail::tvec2<T> & vec
|
||||
)
|
||||
{
|
||||
return &(vec.x);
|
||||
}
|
||||
/// Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tmat2x2<T> make_mat2x2(T const * const ptr);
|
||||
|
||||
/// Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tmat2x3<T> make_mat2x3(T const * const ptr);
|
||||
|
||||
/// Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tmat2x4<T> make_mat2x4(T const * const ptr);
|
||||
|
||||
/// Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tmat3x2<T> make_mat3x2(T const * const ptr);
|
||||
|
||||
/// Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tmat3x3<T> make_mat3x3(T const * const ptr);
|
||||
|
||||
//! Get the const address of the vector content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T const * value_ptr
|
||||
(
|
||||
detail::tvec3<T> const & vec
|
||||
)
|
||||
{
|
||||
return &(vec.x);
|
||||
}
|
||||
|
||||
//! Get the address of the vector content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T * value_ptr
|
||||
(
|
||||
detail::tvec3<T> & vec
|
||||
)
|
||||
{
|
||||
return &(vec.x);
|
||||
}
|
||||
/// Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tmat3x4<T> make_mat3x4(T const * const ptr);
|
||||
|
||||
/// Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tmat4x2<T> make_mat4x2(
|
||||
T const * const ptr);
|
||||
|
||||
/// Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tmat4x3<T> make_mat4x3(T const * const ptr);
|
||||
|
||||
/// Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tmat4x4<T> make_mat4x4(T const * const ptr);
|
||||
|
||||
/// Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tmat2x2<T> make_mat2(T const * const ptr);
|
||||
|
||||
/// Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tmat3x3<T> make_mat3(T const * const ptr);
|
||||
|
||||
//! Get the const address of the vector content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T const * value_ptr
|
||||
(
|
||||
detail::tvec4<T> const & vec
|
||||
)
|
||||
{
|
||||
return &(vec.x);
|
||||
}
|
||||
|
||||
//! Get the address of the vector content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T * value_ptr
|
||||
(
|
||||
detail::tvec4<T> & vec
|
||||
)
|
||||
{
|
||||
return &(vec.x);
|
||||
}
|
||||
|
||||
//! Get the const address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T const * value_ptr
|
||||
(
|
||||
detail::tmat2x2<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T * value_ptr
|
||||
(
|
||||
detail::tmat2x2<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the const address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T const * value_ptr
|
||||
(
|
||||
detail::tmat3x3<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T * value_ptr
|
||||
(
|
||||
detail::tmat3x3<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the const address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T const * value_ptr
|
||||
(
|
||||
detail::tmat4x4<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T * value_ptr
|
||||
(
|
||||
detail::tmat4x4<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the const address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T const * value_ptr
|
||||
(
|
||||
detail::tmat2x3<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T * value_ptr
|
||||
(
|
||||
detail::tmat2x3<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the const address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T const * value_ptr
|
||||
(
|
||||
detail::tmat3x2<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T * value_ptr
|
||||
(
|
||||
detail::tmat3x2<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the const address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T const * value_ptr
|
||||
(
|
||||
detail::tmat2x4<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T * value_ptr
|
||||
(
|
||||
detail::tmat2x4<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the const address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T const * value_ptr
|
||||
(
|
||||
detail::tmat4x2<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T * value_ptr
|
||||
(
|
||||
detail::tmat4x2<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the const address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T const * value_ptr
|
||||
(
|
||||
detail::tmat3x4<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T * value_ptr
|
||||
(
|
||||
detail::tmat3x4<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the const address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T const * value_ptr
|
||||
(
|
||||
detail::tmat4x3<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Get the address of the matrix content.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
inline T * value_ptr(detail::tmat4x3<T> & mat)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace type_ptr
|
||||
}//namespace gtc
|
||||
/// Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tmat4x4<T> make_mat4(T const * const ptr);
|
||||
|
||||
/// Build a quaternion from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
detail::tquat<T> make_quat(T const * const ptr);
|
||||
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#include "type_ptr.inl"
|
||||
|
||||
namespace glm{using namespace gtc::type_ptr;}
|
||||
|
||||
#endif//glm_gtx_type_ptr
|
||||
#endif//GLM_GTC_type_ptr
|
||||
|
||||
|
||||
@@ -0,0 +1,462 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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.
|
||||
///
|
||||
/// @ref gtc_type_ptr
|
||||
/// @file glm/gtc/type_ptr.inl
|
||||
/// @date 2011-06-15 / 2011-12-07
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
/// @addtogroup gtc_type_ptr
|
||||
/// @{
|
||||
|
||||
/// Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T const * value_ptr
|
||||
(
|
||||
detail::tvec2<T> const & vec
|
||||
)
|
||||
{
|
||||
return &(vec.x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T * value_ptr
|
||||
(
|
||||
detail::tvec2<T> & vec
|
||||
)
|
||||
{
|
||||
return &(vec.x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T const * value_ptr
|
||||
(
|
||||
detail::tvec3<T> const & vec
|
||||
)
|
||||
{
|
||||
return &(vec.x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T * value_ptr
|
||||
(
|
||||
detail::tvec3<T> & vec
|
||||
)
|
||||
{
|
||||
return &(vec.x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T const * value_ptr
|
||||
(
|
||||
detail::tvec4<T> const & vec
|
||||
)
|
||||
{
|
||||
return &(vec.x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T * value_ptr
|
||||
(
|
||||
detail::tvec4<T> & vec
|
||||
)
|
||||
{
|
||||
return &(vec.x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T const * value_ptr
|
||||
(
|
||||
detail::tmat2x2<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T * value_ptr
|
||||
(
|
||||
detail::tmat2x2<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T const * value_ptr
|
||||
(
|
||||
detail::tmat3x3<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T * value_ptr
|
||||
(
|
||||
detail::tmat3x3<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T const * value_ptr
|
||||
(
|
||||
detail::tmat4x4<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
//! From GLM_GTC_type_ptr extension.
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T * value_ptr
|
||||
(
|
||||
detail::tmat4x4<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T const * value_ptr
|
||||
(
|
||||
detail::tmat2x3<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T * value_ptr
|
||||
(
|
||||
detail::tmat2x3<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T const * value_ptr
|
||||
(
|
||||
detail::tmat3x2<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T * value_ptr
|
||||
(
|
||||
detail::tmat3x2<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T const * value_ptr
|
||||
(
|
||||
detail::tmat2x4<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T * value_ptr
|
||||
(
|
||||
detail::tmat2x4<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T const * value_ptr
|
||||
(
|
||||
detail::tmat4x2<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T * value_ptr
|
||||
(
|
||||
detail::tmat4x2<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T const * value_ptr
|
||||
(
|
||||
detail::tmat3x4<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T * value_ptr
|
||||
(
|
||||
detail::tmat3x4<T> & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T const * value_ptr
|
||||
(
|
||||
detail::tmat4x3<T> const & mat
|
||||
)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Return the constant address to the data of the input parameter.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T const * value_ptr
|
||||
(
|
||||
detail::tquat<T> const & q
|
||||
)
|
||||
{
|
||||
return &(q[0]);
|
||||
}
|
||||
|
||||
//! Get the address of the matrix content.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER T * value_ptr(detail::tmat4x3<T> & mat)
|
||||
{
|
||||
return &(mat[0].x);
|
||||
}
|
||||
|
||||
//! Build a vector from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> make_vec2(T const * const ptr)
|
||||
{
|
||||
detail::tvec2<T> Result;
|
||||
memcpy(value_ptr(Result), ptr, sizeof(detail::tvec2<T>));
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Build a vector from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> make_vec3(T const * const ptr)
|
||||
{
|
||||
detail::tvec3<T> Result;
|
||||
memcpy(value_ptr(Result), ptr, sizeof(detail::tvec3<T>));
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Build a vector from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> make_vec4(T const * const ptr)
|
||||
{
|
||||
detail::tvec4<T> Result;
|
||||
memcpy(value_ptr(Result), ptr, sizeof(detail::tvec4<T>));
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2x2(T const * const ptr)
|
||||
{
|
||||
detail::tmat2x2<T> Result;
|
||||
memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x2<T>));
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x3<T> make_mat2x3(T const * const ptr)
|
||||
{
|
||||
detail::tmat2x3<T> Result;
|
||||
memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x3<T>));
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x4<T> make_mat2x4(T const * const ptr)
|
||||
{
|
||||
detail::tmat2x4<T> Result;
|
||||
memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x4<T>));
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x2<T> make_mat3x2(T const * const ptr)
|
||||
{
|
||||
detail::tmat3x2<T> Result;
|
||||
memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x2<T>));
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3x3(T const * const ptr)
|
||||
{
|
||||
detail::tmat3x3<T> Result;
|
||||
memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x3<T>));
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x4<T> make_mat3x4(T const * const ptr)
|
||||
{
|
||||
detail::tmat3x4<T> Result;
|
||||
memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x4<T>));
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x2<T> make_mat4x2(T const * const ptr)
|
||||
{
|
||||
detail::tmat4x2<T> Result;
|
||||
memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x2<T>));
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x3<T> make_mat4x3(T const * const ptr)
|
||||
{
|
||||
detail::tmat4x3<T> Result;
|
||||
memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x3<T>));
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4x4(T const * const ptr)
|
||||
{
|
||||
detail::tmat4x4<T> Result;
|
||||
memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x4<T>));
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2(T const * const ptr)
|
||||
{
|
||||
return make_mat2x2(ptr);
|
||||
}
|
||||
|
||||
//! Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3(T const * const ptr)
|
||||
{
|
||||
return make_mat3x3(ptr);
|
||||
}
|
||||
|
||||
//! Build a matrix from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4(T const * const ptr)
|
||||
{
|
||||
return make_mat4x4(ptr);
|
||||
}
|
||||
|
||||
//! Build a quaternion from a pointer.
|
||||
/// @see gtc_type_ptr
|
||||
template<typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tquat<T> make_quat(T const * const ptr)
|
||||
{
|
||||
detail::tquat<T> Result;
|
||||
memcpy(value_ptr(Result), ptr, sizeof(detail::tquat<T>));
|
||||
return Result;
|
||||
}
|
||||
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-03-10
|
||||
// Updated : 2008-03-15
|
||||
// Licence : This source is under MIT License
|
||||
// File : gtx_associated_min_max.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Dependency:
|
||||
// - GLM core
|
||||
// - GLM_GTX_extented_min_max
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_gtx_associated_min_max
|
||||
#define glm_gtx_associated_min_max
|
||||
|
||||
// Dependency:
|
||||
#include "../glm.hpp"
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(glm_ext))
|
||||
# pragma message("GLM: GLM_GTX_associated_min_max extension included")
|
||||
#endif
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_gtx_associated_min_max();
|
||||
}//namespace test
|
||||
|
||||
namespace gtx
|
||||
{
|
||||
//! GLM_GTX_associated_min_max extension: Min and max functions that return associated values not the compared onces.
|
||||
namespace associated_min_max
|
||||
{
|
||||
/// \addtogroup gtx_associated_min_max
|
||||
///@{
|
||||
|
||||
//! \brief Min comparison between 2 variables
|
||||
template<typename genTypeT, typename genTypeU>
|
||||
genTypeU associatedMin(
|
||||
const genTypeT& x, const genTypeU& a,
|
||||
const genTypeT& y, const genTypeU& b);
|
||||
|
||||
//! \brief Min comparison between 3 variables
|
||||
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);
|
||||
|
||||
//! \brief Min comparison between 4 variables
|
||||
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);
|
||||
|
||||
//! \brief Max comparison between 2 variables
|
||||
template<typename genTypeT, typename genTypeU>
|
||||
genTypeU associatedMax(
|
||||
const genTypeT& x, const genTypeU& a,
|
||||
const genTypeT& y, const genTypeU& b);
|
||||
|
||||
//! \brief Max comparison between 3 variables
|
||||
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);
|
||||
|
||||
//! \brief Max comparison between 4 variables
|
||||
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);
|
||||
///@}
|
||||
|
||||
}//namespace associated_min_max
|
||||
|
||||
bool test();
|
||||
}//namespace gtx
|
||||
}//namespace glm
|
||||
|
||||
#include "associated_min_max.inl"
|
||||
|
||||
namespace glm{using namespace gtx::associated_min_max;}
|
||||
|
||||
#endif//glm_gtx_associated_min_max
|
||||
@@ -1,916 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-03-10
|
||||
// Updated : 2008-03-15
|
||||
// Licence : This source is under MIT License
|
||||
// File : gtx_associated_min_max.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace gtx{
|
||||
namespace associated_min_max{
|
||||
|
||||
// Min comparison between 2 variables
|
||||
template<typename T, typename U>
|
||||
inline U associatedMin(T x, U a, T y, U b)
|
||||
{
|
||||
return x < y ? a : b;
|
||||
}
|
||||
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMin
|
||||
(
|
||||
const detail::tvec2<T>& x, const detail::tvec2<U>& a,
|
||||
const detail::tvec2<T>& y, const detail::tvec2<U>& b
|
||||
)
|
||||
{
|
||||
detail::tvec2<U> Result;
|
||||
//Result.x = x[0] < y[0] ? a[0] : b[0];
|
||||
//Result.y = x[1] < y[1] ? a[1] : b[1];
|
||||
for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
|
||||
Result[i] = x[i] < y[i] ? a[i] : b[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMin
|
||||
(
|
||||
const detail::tvec3<T>& x, const detail::tvec3<U>& a,
|
||||
const detail::tvec3<T>& y, const detail::tvec3<U>& b
|
||||
)
|
||||
{
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
|
||||
Result[i] = x[i] < y[i] ? a[i] : b[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMin
|
||||
(
|
||||
const detail::tvec4<T>& x, const detail::tvec4<U>& a,
|
||||
const detail::tvec4<T>& y, const detail::tvec4<U>& b
|
||||
)
|
||||
{
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
|
||||
Result[i] = x[i] < y[i] ? a[i] : b[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMin
|
||||
(
|
||||
T x, const detail::tvec2<U>& a,
|
||||
T y, const detail::tvec2<U>& b
|
||||
)
|
||||
{
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
|
||||
Result[i] = x < y ? a[i] : b[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMin
|
||||
(
|
||||
T x, const detail::tvec3<U>& a,
|
||||
T y, const detail::tvec3<U>& b
|
||||
)
|
||||
{
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
|
||||
Result[i] = x < y ? a[i] : b[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMin
|
||||
(
|
||||
T x, const detail::tvec4<U>& a,
|
||||
T y, const detail::tvec4<U>& b
|
||||
)
|
||||
{
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
|
||||
Result[i] = x < y ? a[i] : b[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMin
|
||||
(
|
||||
const detail::tvec2<T>& x, U a,
|
||||
const detail::tvec2<T>& y, U b
|
||||
)
|
||||
{
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
|
||||
Result[i] = x[i] < y[i] ? a : b;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMin
|
||||
(
|
||||
const detail::tvec3<T>& x, U a,
|
||||
const detail::tvec3<T>& y, U b
|
||||
)
|
||||
{
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
|
||||
Result[i] = x[i] < y[i] ? a : b;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMin
|
||||
(
|
||||
const detail::tvec4<T>& x, U a,
|
||||
const detail::tvec4<T>& y, U b
|
||||
)
|
||||
{
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
|
||||
Result[i] = x[i] < y[i] ? a : b;
|
||||
return Result;
|
||||
}
|
||||
|
||||
// Min comparison between 3 variables
|
||||
template<typename T, typename U>
|
||||
inline 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<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMin
|
||||
(
|
||||
const detail::tvec2<T>& x, const detail::tvec2<U>& a,
|
||||
const detail::tvec2<T>& y, const detail::tvec2<U>& b,
|
||||
const detail::tvec2<T>& z, const detail::tvec2<U>& c
|
||||
)
|
||||
{
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++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;
|
||||
}
|
||||
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMin
|
||||
(
|
||||
const detail::tvec3<T>& x, const detail::tvec3<U>& a,
|
||||
const detail::tvec3<T>& y, const detail::tvec3<U>& b,
|
||||
const detail::tvec3<T>& z, const detail::tvec3<U>& c
|
||||
)
|
||||
{
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++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;
|
||||
}
|
||||
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMin
|
||||
(
|
||||
const detail::tvec4<T>& x, const detail::tvec4<U>& a,
|
||||
const detail::tvec4<T>& y, const detail::tvec4<U>& b,
|
||||
const detail::tvec4<T>& z, const detail::tvec4<U>& c
|
||||
)
|
||||
{
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++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<typename T, typename U>
|
||||
inline 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<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMin
|
||||
(
|
||||
const detail::tvec2<T>& x, const detail::tvec2<U>& a,
|
||||
const detail::tvec2<T>& y, const detail::tvec2<U>& b,
|
||||
const detail::tvec2<T>& z, const detail::tvec2<U>& c,
|
||||
const detail::tvec2<T>& w, const detail::tvec2<U>& d
|
||||
)
|
||||
{
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMin
|
||||
(
|
||||
const detail::tvec3<T>& x, const detail::tvec3<U>& a,
|
||||
const detail::tvec3<T>& y, const detail::tvec3<U>& b,
|
||||
const detail::tvec3<T>& z, const detail::tvec3<U>& c,
|
||||
const detail::tvec3<T>& w, const detail::tvec3<U>& d
|
||||
)
|
||||
{
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMin
|
||||
(
|
||||
const detail::tvec4<T>& x, const detail::tvec4<U>& a,
|
||||
const detail::tvec4<T>& y, const detail::tvec4<U>& b,
|
||||
const detail::tvec4<T>& z, const detail::tvec4<U>& c,
|
||||
const detail::tvec4<T>& w, const detail::tvec4<U>& d
|
||||
)
|
||||
{
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMin
|
||||
(
|
||||
T x, const detail::tvec2<U>& a,
|
||||
T y, const detail::tvec2<U>& b,
|
||||
T z, const detail::tvec2<U>& c,
|
||||
T w, const detail::tvec2<U>& d
|
||||
)
|
||||
{
|
||||
T Test1 = min(x, y);
|
||||
T Test2 = min(z, w);
|
||||
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMin
|
||||
(
|
||||
T x, const detail::tvec3<U>& a,
|
||||
T y, const detail::tvec3<U>& b,
|
||||
T z, const detail::tvec3<U>& c,
|
||||
T w, const detail::tvec3<U>& d
|
||||
)
|
||||
{
|
||||
T Test1 = min(x, y);
|
||||
T Test2 = min(z, w);
|
||||
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMin
|
||||
(
|
||||
T x, const detail::tvec4<U>& a,
|
||||
T y, const detail::tvec4<U>& b,
|
||||
T z, const detail::tvec4<U>& c,
|
||||
T w, const detail::tvec4<U>& d
|
||||
)
|
||||
{
|
||||
T Test1 = min(x, y);
|
||||
T Test2 = min(z, w);
|
||||
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMin
|
||||
(
|
||||
const detail::tvec2<T>& x, U a,
|
||||
const detail::tvec2<T>& y, U b,
|
||||
const detail::tvec2<T>& z, U c,
|
||||
const detail::tvec2<T>& w, U d
|
||||
)
|
||||
{
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++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;
|
||||
}
|
||||
|
||||
// Min comparison between 4 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMin
|
||||
(
|
||||
const detail::tvec3<T>& x, U a,
|
||||
const detail::tvec3<T>& y, U b,
|
||||
const detail::tvec3<T>& z, U c,
|
||||
const detail::tvec3<T>& w, U d
|
||||
)
|
||||
{
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++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;
|
||||
}
|
||||
|
||||
// Min comparison between 4 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMin
|
||||
(
|
||||
const detail::tvec4<T>& x, U a,
|
||||
const detail::tvec4<T>& y, U b,
|
||||
const detail::tvec4<T>& z, U c,
|
||||
const detail::tvec4<T>& w, U d
|
||||
)
|
||||
{
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++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<typename T, typename U>
|
||||
inline U associatedMax(T x, U a, T y, U b)
|
||||
{
|
||||
return x > y ? a : b;
|
||||
}
|
||||
|
||||
// Max comparison between 2 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMax
|
||||
(
|
||||
const detail::tvec2<T>& x, const detail::tvec2<U>& a,
|
||||
const detail::tvec2<T>& y, const detail::tvec2<U>& b
|
||||
)
|
||||
{
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
|
||||
Result[i] = x[i] > y[i] ? a[i] : b[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
// Max comparison between 2 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMax
|
||||
(
|
||||
const detail::tvec3<T>& x, const detail::tvec3<U>& a,
|
||||
const detail::tvec3<T>& y, const detail::tvec3<U>& b
|
||||
)
|
||||
{
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
|
||||
Result[i] = x[i] > y[i] ? a[i] : b[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
// Max comparison between 2 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMax
|
||||
(
|
||||
const detail::tvec4<T>& x, const detail::tvec4<U>& a,
|
||||
const detail::tvec4<T>& y, const detail::tvec4<U>& b
|
||||
)
|
||||
{
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
|
||||
Result[i] = x[i] > y[i] ? a[i] : b[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
// Max comparison between 2 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMax
|
||||
(
|
||||
T x, const detail::tvec2<U>& a,
|
||||
T y, const detail::tvec2<U>& b
|
||||
)
|
||||
{
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
|
||||
Result[i] = x > y ? a[i] : b[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
// Max comparison between 2 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMax
|
||||
(
|
||||
T x, const detail::tvec3<U>& a,
|
||||
T y, const detail::tvec3<U>& b
|
||||
)
|
||||
{
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
|
||||
Result[i] = x > y ? a[i] : b[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
// Max comparison between 2 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMax
|
||||
(
|
||||
T x, const detail::tvec4<U>& a,
|
||||
T y, const detail::tvec4<U>& b
|
||||
)
|
||||
{
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
|
||||
Result[i] = x > y ? a[i] : b[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
// Max comparison between 2 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMax
|
||||
(
|
||||
const detail::tvec2<T>& x, U a,
|
||||
const detail::tvec2<T>& y, U b
|
||||
)
|
||||
{
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
|
||||
Result[i] = x[i] > y[i] ? a : b;
|
||||
return Result;
|
||||
}
|
||||
|
||||
// Max comparison between 2 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMax
|
||||
(
|
||||
const detail::tvec3<T>& x, U a,
|
||||
const detail::tvec3<T>& y, U b
|
||||
)
|
||||
{
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
|
||||
Result[i] = x[i] > y[i] ? a : b;
|
||||
return Result;
|
||||
}
|
||||
|
||||
// Max comparison between 2 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMax
|
||||
(
|
||||
const detail::tvec4<T>& x, U a,
|
||||
const detail::tvec4<T>& y, U b
|
||||
)
|
||||
{
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
|
||||
Result[i] = x[i] > y[i] ? a : b;
|
||||
return Result;
|
||||
}
|
||||
|
||||
// Max comparison between 3 variables
|
||||
template<typename T, typename U>
|
||||
inline 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<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMax
|
||||
(
|
||||
const detail::tvec2<T>& x, const detail::tvec2<U>& a,
|
||||
const detail::tvec2<T>& y, const detail::tvec2<U>& b,
|
||||
const detail::tvec2<T>& z, const detail::tvec2<U>& c
|
||||
)
|
||||
{
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMax
|
||||
(
|
||||
const detail::tvec3<T>& x, const detail::tvec3<U>& a,
|
||||
const detail::tvec3<T>& y, const detail::tvec3<U>& b,
|
||||
const detail::tvec3<T>& z, const detail::tvec3<U>& c
|
||||
)
|
||||
{
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMax
|
||||
(
|
||||
const detail::tvec4<T>& x, const detail::tvec4<U>& a,
|
||||
const detail::tvec4<T>& y, const detail::tvec4<U>& b,
|
||||
const detail::tvec4<T>& z, const detail::tvec4<U>& c
|
||||
)
|
||||
{
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMax
|
||||
(
|
||||
T x, const detail::tvec2<U>& a,
|
||||
T y, const detail::tvec2<U>& b,
|
||||
T z, const detail::tvec2<U>& c
|
||||
)
|
||||
{
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMax
|
||||
(
|
||||
T x, const detail::tvec3<U>& a,
|
||||
T y, const detail::tvec3<U>& b,
|
||||
T z, const detail::tvec3<U>& c
|
||||
)
|
||||
{
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMax
|
||||
(
|
||||
T x, const detail::tvec4<U>& a,
|
||||
T y, const detail::tvec4<U>& b,
|
||||
T z, const detail::tvec4<U>& c
|
||||
)
|
||||
{
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMax
|
||||
(
|
||||
const detail::tvec2<T>& x, U a,
|
||||
const detail::tvec2<T>& y, U b,
|
||||
const detail::tvec2<T>& z, U c
|
||||
)
|
||||
{
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
|
||||
Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c);
|
||||
return Result;
|
||||
}
|
||||
|
||||
// Max comparison between 3 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMax
|
||||
(
|
||||
const detail::tvec3<T>& x, U a,
|
||||
const detail::tvec3<T>& y, U b,
|
||||
const detail::tvec3<T>& z, U c
|
||||
)
|
||||
{
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
|
||||
Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c);
|
||||
return Result;
|
||||
}
|
||||
|
||||
// Max comparison between 3 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMax
|
||||
(
|
||||
const detail::tvec4<T>& x, U a,
|
||||
const detail::tvec4<T>& y, U b,
|
||||
const detail::tvec4<T>& z, U c
|
||||
)
|
||||
{
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++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<typename T, typename U>
|
||||
inline 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<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMax
|
||||
(
|
||||
const detail::tvec2<T>& x, const detail::tvec2<U>& a,
|
||||
const detail::tvec2<T>& y, const detail::tvec2<U>& b,
|
||||
const detail::tvec2<T>& z, const detail::tvec2<U>& c,
|
||||
const detail::tvec2<T>& w, const detail::tvec2<U>& d
|
||||
)
|
||||
{
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMax
|
||||
(
|
||||
const detail::tvec3<T>& x, const detail::tvec3<U>& a,
|
||||
const detail::tvec3<T>& y, const detail::tvec3<U>& b,
|
||||
const detail::tvec3<T>& z, const detail::tvec3<U>& c,
|
||||
const detail::tvec3<T>& w, const detail::tvec3<U>& d
|
||||
)
|
||||
{
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMax
|
||||
(
|
||||
const detail::tvec4<T>& x, const detail::tvec4<U>& a,
|
||||
const detail::tvec4<T>& y, const detail::tvec4<U>& b,
|
||||
const detail::tvec4<T>& z, const detail::tvec4<U>& c,
|
||||
const detail::tvec4<T>& w, const detail::tvec4<U>& d
|
||||
)
|
||||
{
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMax
|
||||
(
|
||||
T x, const detail::tvec2<U>& a,
|
||||
T y, const detail::tvec2<U>& b,
|
||||
T z, const detail::tvec2<U>& c,
|
||||
T w, const detail::tvec2<U>& d
|
||||
)
|
||||
{
|
||||
T Test1 = max(x, y);
|
||||
T Test2 = max(z, w);
|
||||
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMax
|
||||
(
|
||||
T x, const detail::tvec3<U>& a,
|
||||
T y, const detail::tvec3<U>& b,
|
||||
T z, const detail::tvec3<U>& c,
|
||||
T w, const detail::tvec3<U>& d
|
||||
)
|
||||
{
|
||||
T Test1 = max(x, y);
|
||||
T Test2 = max(z, w);
|
||||
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMax
|
||||
(
|
||||
T x, const detail::tvec4<U>& a,
|
||||
T y, const detail::tvec4<U>& b,
|
||||
T z, const detail::tvec4<U>& c,
|
||||
T w, const detail::tvec4<U>& d
|
||||
)
|
||||
{
|
||||
T Test1 = max(x, y);
|
||||
T Test2 = max(z, w);
|
||||
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++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<typename T, typename U>
|
||||
inline detail::tvec2<U> associatedMax
|
||||
(
|
||||
const detail::tvec2<T>& x, U a,
|
||||
const detail::tvec2<T>& y, U b,
|
||||
const detail::tvec2<T>& z, U c,
|
||||
const detail::tvec2<T>& w, U d
|
||||
)
|
||||
{
|
||||
detail::tvec2<U> Result;
|
||||
for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++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;
|
||||
}
|
||||
|
||||
// Max comparison between 4 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec3<U> associatedMax
|
||||
(
|
||||
const detail::tvec3<T>& x, U a,
|
||||
const detail::tvec3<T>& y, U b,
|
||||
const detail::tvec3<T>& z, U c,
|
||||
const detail::tvec3<T>& w, U d
|
||||
)
|
||||
{
|
||||
detail::tvec3<U> Result;
|
||||
for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++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;
|
||||
}
|
||||
|
||||
// Max comparison between 4 variables
|
||||
template<typename T, typename U>
|
||||
inline detail::tvec4<U> associatedMax
|
||||
(
|
||||
const detail::tvec4<T>& x, U a,
|
||||
const detail::tvec4<T>& y, U b,
|
||||
const detail::tvec4<T>& z, U c,
|
||||
const detail::tvec4<T>& w, U d
|
||||
)
|
||||
{
|
||||
detail::tvec4<U> Result;
|
||||
for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++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 associated_min_max
|
||||
}//namespace gtx
|
||||
}//namespace glm
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user