Created
January 26, 2021 00:34
-
-
Save ericoporto/a1e7cb0fe1f294e937a50c1e63d4907e to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 1 "glm-amalgamated/glm.h" | |
# 16 "glm-amalgamated/glm.h" | |
#ifndef GLM_SETUP_INCLUDED | |
#include <cassert> | |
#include <cstddef> | |
#define GLM_VERSION_MAJOR 0 | |
#define GLM_VERSION_MINOR 9 | |
#define GLM_VERSION_PATCH 9 | |
#define GLM_VERSION_REVISION 8 | |
#define GLM_VERSION 998 | |
#define GLM_VERSION_MESSAGE "GLM: version 0.9.9.8" | |
#define GLM_SETUP_INCLUDED GLM_VERSION | |
#define GLM_DISABLE 0 | |
#define GLM_ENABLE 1 | |
#if defined(GLM_FORCE_MESSAGES) | |
#define GLM_MESSAGES GLM_ENABLE | |
#else | |
#define GLM_MESSAGES GLM_DISABLE | |
#endif | |
# 52 "glm-amalgamated/glm.h" | |
#define GLM_PLATFORM_UNKNOWN 0x00000000 | |
#define GLM_PLATFORM_WINDOWS 0x00010000 | |
#define GLM_PLATFORM_LINUX 0x00020000 | |
#define GLM_PLATFORM_APPLE 0x00040000 | |
#define GLM_PLATFORM_ANDROID 0x00100000 | |
#define GLM_PLATFORM_CHROME_NACL 0x00200000 | |
#define GLM_PLATFORM_UNIX 0x00400000 | |
#define GLM_PLATFORM_QNXNTO 0x00800000 | |
#define GLM_PLATFORM_WINCE 0x01000000 | |
#define GLM_PLATFORM_CYGWIN 0x02000000 | |
#ifdef GLM_FORCE_PLATFORM_UNKNOWN | |
#define GLM_PLATFORM GLM_PLATFORM_UNKNOWN | |
#elif defined(__CYGWIN__) | |
#define GLM_PLATFORM GLM_PLATFORM_CYGWIN | |
#elif defined(__QNXNTO__) | |
#define GLM_PLATFORM GLM_PLATFORM_QNXNTO | |
#elif defined(__APPLE__) | |
#define GLM_PLATFORM GLM_PLATFORM_APPLE | |
#elif defined(WINCE) | |
#define GLM_PLATFORM GLM_PLATFORM_WINCE | |
#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 | |
#define GLM_COMPILER_UNKNOWN 0x00000000 | |
#define GLM_COMPILER_INTEL 0x00100000 | |
#define GLM_COMPILER_INTEL14 0x00100040 | |
#define GLM_COMPILER_INTEL15 0x00100050 | |
#define GLM_COMPILER_INTEL16 0x00100060 | |
#define GLM_COMPILER_INTEL17 0x00100070 | |
#define GLM_COMPILER_VC 0x01000000 | |
#define GLM_COMPILER_VC12 0x01000001 | |
#define GLM_COMPILER_VC14 0x01000002 | |
#define GLM_COMPILER_VC15 0x01000003 | |
#define GLM_COMPILER_VC15_3 0x01000004 | |
#define GLM_COMPILER_VC15_5 0x01000005 | |
#define GLM_COMPILER_VC15_6 0x01000006 | |
#define GLM_COMPILER_VC15_7 0x01000007 | |
#define GLM_COMPILER_VC15_8 0x01000008 | |
#define GLM_COMPILER_VC15_9 0x01000009 | |
#define GLM_COMPILER_VC16 0x0100000A | |
#define GLM_COMPILER_GCC 0x02000000 | |
#define GLM_COMPILER_GCC46 0x020000D0 | |
#define GLM_COMPILER_GCC47 0x020000E0 | |
#define GLM_COMPILER_GCC48 0x020000F0 | |
#define GLM_COMPILER_GCC49 0x02000100 | |
#define GLM_COMPILER_GCC5 0x02000200 | |
#define GLM_COMPILER_GCC6 0x02000300 | |
#define GLM_COMPILER_GCC7 0x02000400 | |
#define GLM_COMPILER_GCC8 0x02000500 | |
#define GLM_COMPILER_CUDA 0x10000000 | |
#define GLM_COMPILER_CUDA75 0x10000001 | |
#define GLM_COMPILER_CUDA80 0x10000002 | |
#define GLM_COMPILER_CUDA90 0x10000004 | |
#define GLM_COMPILER_SYCL 0x00300000 | |
#define GLM_COMPILER_CLANG 0x20000000 | |
#define GLM_COMPILER_CLANG34 0x20000050 | |
#define GLM_COMPILER_CLANG35 0x20000060 | |
#define GLM_COMPILER_CLANG36 0x20000070 | |
#define GLM_COMPILER_CLANG37 0x20000080 | |
#define GLM_COMPILER_CLANG38 0x20000090 | |
#define GLM_COMPILER_CLANG39 0x200000A0 | |
#define GLM_COMPILER_CLANG40 0x200000B0 | |
#define GLM_COMPILER_CLANG41 0x200000C0 | |
#define GLM_COMPILER_CLANG42 0x200000D0 | |
#define GLM_MODEL_32 0x00000010 | |
#define GLM_MODEL_64 0x00000020 | |
#ifdef GLM_FORCE_COMPILER_UNKNOWN | |
#define GLM_COMPILER GLM_COMPILER_UNKNOWN | |
#elif defined(__INTEL_COMPILER) | |
# if __INTEL_COMPILER >= 1700 | |
#define GLM_COMPILER GLM_COMPILER_INTEL17 | |
# elif __INTEL_COMPILER >= 1600 | |
#define GLM_COMPILER GLM_COMPILER_INTEL16 | |
# elif __INTEL_COMPILER >= 1500 | |
#define GLM_COMPILER GLM_COMPILER_INTEL15 | |
# elif __INTEL_COMPILER >= 1400 | |
#define GLM_COMPILER GLM_COMPILER_INTEL14 | |
# elif __INTEL_COMPILER < 1400 | |
# error "GLM requires ICC 2013 SP1 or newer" | |
# endif | |
#elif defined(__CUDACC__) | |
# if !defined(CUDA_VERSION) && !defined(GLM_FORCE_CUDA) | |
# include <cuda.h> | |
# endif | |
# if CUDA_VERSION >= 8000 | |
#define GLM_COMPILER GLM_COMPILER_CUDA80 | |
# elif CUDA_VERSION >= 7500 | |
#define GLM_COMPILER GLM_COMPILER_CUDA75 | |
# elif CUDA_VERSION >= 7000 | |
#define GLM_COMPILER GLM_COMPILER_CUDA70 | |
# elif CUDA_VERSION < 7000 | |
# error "GLM requires CUDA 7.0 or higher" | |
# endif | |
#elif defined(__SYCL_DEVICE_ONLY__) | |
#define GLM_COMPILER GLM_COMPILER_SYCL | |
#elif defined(__clang__) | |
# if defined(__apple_build_version__) | |
# if (__clang_major__ < 6) | |
# error "GLM requires Clang 3.4 / Apple Clang 6.0 or higher" | |
# elif __clang_major__ == 6 && __clang_minor__ == 0 | |
#define GLM_COMPILER GLM_COMPILER_CLANG35 | |
# elif __clang_major__ == 6 && __clang_minor__ >= 1 | |
#define GLM_COMPILER GLM_COMPILER_CLANG36 | |
# elif __clang_major__ >= 7 | |
#define GLM_COMPILER GLM_COMPILER_CLANG37 | |
# endif | |
# else | |
# if ((__clang_major__ == 3) && (__clang_minor__ < 4)) || (__clang_major__ < 3) | |
# error "GLM requires Clang 3.4 or higher" | |
# elif __clang_major__ == 3 && __clang_minor__ == 4 | |
#define GLM_COMPILER GLM_COMPILER_CLANG34 | |
# elif __clang_major__ == 3 && __clang_minor__ == 5 | |
#define GLM_COMPILER GLM_COMPILER_CLANG35 | |
# elif __clang_major__ == 3 && __clang_minor__ == 6 | |
#define GLM_COMPILER GLM_COMPILER_CLANG36 | |
# elif __clang_major__ == 3 && __clang_minor__ == 7 | |
#define GLM_COMPILER GLM_COMPILER_CLANG37 | |
# elif __clang_major__ == 3 && __clang_minor__ == 8 | |
#define GLM_COMPILER GLM_COMPILER_CLANG38 | |
# elif __clang_major__ == 3 && __clang_minor__ >= 9 | |
#define GLM_COMPILER GLM_COMPILER_CLANG39 | |
# 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 | |
#define GLM_COMPILER GLM_COMPILER_CLANG42 | |
# endif | |
# endif | |
#elif defined(_MSC_VER) | |
# if _MSC_VER >= 1920 | |
#define GLM_COMPILER GLM_COMPILER_VC16 | |
# elif _MSC_VER >= 1916 | |
#define GLM_COMPILER GLM_COMPILER_VC15_9 | |
# elif _MSC_VER >= 1915 | |
#define GLM_COMPILER GLM_COMPILER_VC15_8 | |
# elif _MSC_VER >= 1914 | |
#define GLM_COMPILER GLM_COMPILER_VC15_7 | |
# elif _MSC_VER >= 1913 | |
#define GLM_COMPILER GLM_COMPILER_VC15_6 | |
# elif _MSC_VER >= 1912 | |
#define GLM_COMPILER GLM_COMPILER_VC15_5 | |
# elif _MSC_VER >= 1911 | |
#define GLM_COMPILER GLM_COMPILER_VC15_3 | |
# elif _MSC_VER >= 1910 | |
#define GLM_COMPILER GLM_COMPILER_VC15 | |
# elif _MSC_VER >= 1900 | |
#define GLM_COMPILER GLM_COMPILER_VC14 | |
# elif _MSC_VER >= 1800 | |
#define GLM_COMPILER GLM_COMPILER_VC12 | |
# elif _MSC_VER < 1800 | |
# error "GLM requires Visual C++ 12 - 2013 or higher" | |
# endif | |
#elif defined(__GNUC__) || defined(__MINGW32__) | |
# if __GNUC__ >= 8 | |
#define GLM_COMPILER GLM_COMPILER_GCC8 | |
# elif __GNUC__ >= 7 | |
#define GLM_COMPILER GLM_COMPILER_GCC7 | |
# elif __GNUC__ >= 6 | |
#define GLM_COMPILER GLM_COMPILER_GCC6 | |
# elif __GNUC__ >= 5 | |
#define GLM_COMPILER GLM_COMPILER_GCC5 | |
# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 9 | |
#define GLM_COMPILER GLM_COMPILER_GCC49 | |
# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 8 | |
#define GLM_COMPILER GLM_COMPILER_GCC48 | |
# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 7 | |
#define GLM_COMPILER GLM_COMPILER_GCC47 | |
# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 6 | |
#define GLM_COMPILER GLM_COMPILER_GCC46 | |
# elif ((__GNUC__ == 4) && (__GNUC_MINOR__ < 6)) || (__GNUC__ < 4) | |
# error "GLM requires GCC 4.6 or higher" | |
# endif | |
#else | |
#define GLM_COMPILER GLM_COMPILER_UNKNOWN | |
#endif | |
#ifndef GLM_COMPILER | |
# error "GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message." | |
#endif | |
#define GLM_ARCH_MIPS_BIT (0x10000000) | |
#define GLM_ARCH_PPC_BIT (0x20000000) | |
#define GLM_ARCH_ARM_BIT (0x40000000) | |
#define GLM_ARCH_ARMV8_BIT (0x01000000) | |
#define GLM_ARCH_X86_BIT (0x80000000) | |
#define GLM_ARCH_SIMD_BIT (0x00001000) | |
#define GLM_ARCH_NEON_BIT (0x00000001) | |
#define GLM_ARCH_SSE_BIT (0x00000002) | |
#define GLM_ARCH_SSE2_BIT (0x00000004) | |
#define GLM_ARCH_SSE3_BIT (0x00000008) | |
#define GLM_ARCH_SSSE3_BIT (0x00000010) | |
#define GLM_ARCH_SSE41_BIT (0x00000020) | |
#define GLM_ARCH_SSE42_BIT (0x00000040) | |
#define GLM_ARCH_AVX_BIT (0x00000080) | |
#define GLM_ARCH_AVX2_BIT (0x00000100) | |
#define GLM_ARCH_UNKNOWN (0) | |
#define GLM_ARCH_X86 (GLM_ARCH_X86_BIT) | |
#define GLM_ARCH_SSE (GLM_ARCH_SSE_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_X86) | |
#define GLM_ARCH_SSE2 (GLM_ARCH_SSE2_BIT | GLM_ARCH_SSE) | |
#define GLM_ARCH_SSE3 (GLM_ARCH_SSE3_BIT | GLM_ARCH_SSE2) | |
#define GLM_ARCH_SSSE3 (GLM_ARCH_SSSE3_BIT | GLM_ARCH_SSE3) | |
#define GLM_ARCH_SSE41 (GLM_ARCH_SSE41_BIT | GLM_ARCH_SSSE3) | |
#define GLM_ARCH_SSE42 (GLM_ARCH_SSE42_BIT | GLM_ARCH_SSE41) | |
#define GLM_ARCH_AVX (GLM_ARCH_AVX_BIT | GLM_ARCH_SSE42) | |
#define GLM_ARCH_AVX2 (GLM_ARCH_AVX2_BIT | GLM_ARCH_AVX) | |
#define GLM_ARCH_ARM (GLM_ARCH_ARM_BIT) | |
#define GLM_ARCH_ARMV8 (GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM | GLM_ARCH_ARMV8_BIT) | |
#define GLM_ARCH_NEON (GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM) | |
#define GLM_ARCH_MIPS (GLM_ARCH_MIPS_BIT) | |
#define GLM_ARCH_PPC (GLM_ARCH_PPC_BIT) | |
#if defined(GLM_FORCE_ARCH_UNKNOWN) || defined(GLM_FORCE_PURE) | |
#define GLM_ARCH GLM_ARCH_UNKNOWN | |
#elif defined(GLM_FORCE_NEON) | |
# if __ARM_ARCH >= 8 | |
#define GLM_ARCH (GLM_ARCH_ARMV8) | |
# else | |
#define GLM_ARCH (GLM_ARCH_NEON) | |
# endif | |
#define GLM_FORCE_INTRINSICS | |
#elif defined(GLM_FORCE_AVX2) | |
#define GLM_ARCH (GLM_ARCH_AVX2) | |
#define GLM_FORCE_INTRINSICS | |
#elif defined(GLM_FORCE_AVX) | |
#define GLM_ARCH (GLM_ARCH_AVX) | |
#define GLM_FORCE_INTRINSICS | |
#elif defined(GLM_FORCE_SSE42) | |
#define GLM_ARCH (GLM_ARCH_SSE42) | |
#define GLM_FORCE_INTRINSICS | |
#elif defined(GLM_FORCE_SSE41) | |
#define GLM_ARCH (GLM_ARCH_SSE41) | |
#define GLM_FORCE_INTRINSICS | |
#elif defined(GLM_FORCE_SSSE3) | |
#define GLM_ARCH (GLM_ARCH_SSSE3) | |
#define GLM_FORCE_INTRINSICS | |
#elif defined(GLM_FORCE_SSE3) | |
#define GLM_ARCH (GLM_ARCH_SSE3) | |
#define GLM_FORCE_INTRINSICS | |
#elif defined(GLM_FORCE_SSE2) | |
#define GLM_ARCH (GLM_ARCH_SSE2) | |
#define GLM_FORCE_INTRINSICS | |
#elif defined(GLM_FORCE_SSE) | |
#define GLM_ARCH (GLM_ARCH_SSE) | |
#define GLM_FORCE_INTRINSICS | |
#elif defined(GLM_FORCE_INTRINSICS) && !defined(GLM_FORCE_XYZW_ONLY) | |
# if defined(__AVX2__) | |
#define GLM_ARCH (GLM_ARCH_AVX2) | |
# elif defined(__AVX__) | |
#define GLM_ARCH (GLM_ARCH_AVX) | |
# elif defined(__SSE4_2__) | |
#define GLM_ARCH (GLM_ARCH_SSE42) | |
# elif defined(__SSE4_1__) | |
#define GLM_ARCH (GLM_ARCH_SSE41) | |
# elif defined(__SSSE3__) | |
#define GLM_ARCH (GLM_ARCH_SSSE3) | |
# elif defined(__SSE3__) | |
#define GLM_ARCH (GLM_ARCH_SSE3) | |
# elif defined(__SSE2__) || defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86_FP) | |
#define GLM_ARCH (GLM_ARCH_SSE2) | |
# elif defined(__i386__) | |
#define GLM_ARCH (GLM_ARCH_X86) | |
# elif defined(__ARM_ARCH) && (__ARM_ARCH >= 8) | |
#define GLM_ARCH (GLM_ARCH_ARMV8) | |
# elif defined(__ARM_NEON) | |
#define GLM_ARCH (GLM_ARCH_ARM | GLM_ARCH_NEON) | |
# elif defined(__arm__ ) || defined(_M_ARM) | |
#define GLM_ARCH (GLM_ARCH_ARM) | |
# elif defined(__mips__ ) | |
#define GLM_ARCH (GLM_ARCH_MIPS) | |
# elif defined(__powerpc__ ) || defined(_M_PPC) | |
#define GLM_ARCH (GLM_ARCH_PPC) | |
# else | |
#define GLM_ARCH (GLM_ARCH_UNKNOWN) | |
# endif | |
#else | |
# if defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86) || defined(__i386__) | |
#define GLM_ARCH (GLM_ARCH_X86) | |
# elif defined(__arm__) || defined(_M_ARM) | |
#define GLM_ARCH (GLM_ARCH_ARM) | |
# elif defined(__powerpc__) || defined(_M_PPC) | |
#define GLM_ARCH (GLM_ARCH_PPC) | |
# elif defined(__mips__) | |
#define GLM_ARCH (GLM_ARCH_MIPS) | |
# else | |
#define GLM_ARCH (GLM_ARCH_UNKNOWN) | |
# endif | |
#endif | |
#if GLM_ARCH & GLM_ARCH_AVX2_BIT | |
# include <immintrin.h> | |
#elif GLM_ARCH & GLM_ARCH_AVX_BIT | |
# include <immintrin.h> | |
#elif GLM_ARCH & GLM_ARCH_SSE42_BIT | |
# if GLM_COMPILER & GLM_COMPILER_CLANG | |
# include <popcntintrin.h> | |
# endif | |
# include <nmmintrin.h> | |
#elif GLM_ARCH & GLM_ARCH_SSE41_BIT | |
# include <smmintrin.h> | |
#elif GLM_ARCH & GLM_ARCH_SSSE3_BIT | |
# include <tmmintrin.h> | |
#elif GLM_ARCH & GLM_ARCH_SSE3_BIT | |
# include <pmmintrin.h> | |
#elif GLM_ARCH & GLM_ARCH_SSE2_BIT | |
# include <emmintrin.h> | |
#elif GLM_ARCH & GLM_ARCH_NEON_BIT | |
# include "neon.h" | |
#endif | |
#if GLM_ARCH & GLM_ARCH_SSE2_BIT | |
typedef __m128 glm_f32vec4; | |
typedef __m128i glm_i32vec4; | |
typedef __m128i glm_u32vec4; | |
typedef __m128d glm_f64vec2; | |
typedef __m128i glm_i64vec2; | |
typedef __m128i glm_u64vec2; | |
typedef glm_f32vec4 glm_vec4; | |
typedef glm_i32vec4 glm_ivec4; | |
typedef glm_u32vec4 glm_uvec4; | |
typedef glm_f64vec2 glm_dvec2; | |
#endif | |
#if GLM_ARCH & GLM_ARCH_AVX_BIT | |
typedef __m256d glm_f64vec4; | |
typedef glm_f64vec4 glm_dvec4; | |
#endif | |
#if GLM_ARCH & GLM_ARCH_AVX2_BIT | |
typedef __m256i glm_i64vec4; | |
typedef __m256i glm_u64vec4; | |
#endif | |
#if GLM_ARCH & GLM_ARCH_NEON_BIT | |
typedef float32x4_t glm_f32vec4; | |
typedef int32x4_t glm_i32vec4; | |
typedef uint32x4_t glm_u32vec4; | |
#endif | |
#if defined(_M_ARM64) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__) | |
#define GLM_MODEL GLM_MODEL_64 | |
#elif defined(__i386__) || defined(__ppc__) || defined(__ILP32__) || defined(_M_ARM) | |
#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." | |
#endif | |
#define GLM_LANG_CXX98_FLAG (1 << 1) | |
#define GLM_LANG_CXX03_FLAG (1 << 2) | |
#define GLM_LANG_CXX0X_FLAG (1 << 3) | |
#define GLM_LANG_CXX11_FLAG (1 << 4) | |
#define GLM_LANG_CXX14_FLAG (1 << 5) | |
#define GLM_LANG_CXX17_FLAG (1 << 6) | |
#define GLM_LANG_CXX2A_FLAG (1 << 7) | |
#define GLM_LANG_CXXMS_FLAG (1 << 8) | |
#define GLM_LANG_CXXGNU_FLAG (1 << 9) | |
#define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG | |
#define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG) | |
#define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG) | |
#define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG) | |
#define GLM_LANG_CXX14 (GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG) | |
#define GLM_LANG_CXX17 (GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG) | |
#define GLM_LANG_CXX2A (GLM_LANG_CXX17 | GLM_LANG_CXX2A_FLAG) | |
#define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG | |
#define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG | |
#if (defined(_MSC_EXTENSIONS)) | |
#define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG | |
#elif ((GLM_COMPILER & (GLM_COMPILER_CLANG | GLM_COMPILER_GCC)) && (GLM_ARCH & GLM_ARCH_SIMD_BIT)) | |
#define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG | |
#else | |
#define GLM_LANG_EXT 0 | |
#endif | |
#if (defined(GLM_FORCE_CXX_UNKNOWN)) | |
#define GLM_LANG 0 | |
#elif defined(GLM_FORCE_CXX2A) | |
#define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT) | |
#define GLM_LANG_STL11_FORCED | |
#elif defined(GLM_FORCE_CXX17) | |
#define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT) | |
#define GLM_LANG_STL11_FORCED | |
#elif defined(GLM_FORCE_CXX14) | |
#define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT) | |
#define GLM_LANG_STL11_FORCED | |
#elif defined(GLM_FORCE_CXX11) | |
#define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT) | |
#define GLM_LANG_STL11_FORCED | |
#elif defined(GLM_FORCE_CXX03) | |
#define GLM_LANG (GLM_LANG_CXX03 | GLM_LANG_EXT) | |
#elif defined(GLM_FORCE_CXX98) | |
#define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT) | |
#else | |
# if GLM_COMPILER & GLM_COMPILER_VC && defined(_MSVC_LANG) | |
# if GLM_COMPILER >= GLM_COMPILER_VC15_7 | |
#define GLM_LANG_PLATFORM _MSVC_LANG | |
# elif GLM_COMPILER >= GLM_COMPILER_VC15 | |
# if _MSVC_LANG > 201402L | |
#define GLM_LANG_PLATFORM 201402L | |
# else | |
#define GLM_LANG_PLATFORM _MSVC_LANG | |
# endif | |
# else | |
#define GLM_LANG_PLATFORM 0 | |
# endif | |
# else | |
#define GLM_LANG_PLATFORM 0 | |
# endif | |
# if __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L | |
#define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT) | |
# elif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L | |
#define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT) | |
# elif __cplusplus == 201402L || __cplusplus == 201500L || GLM_LANG_PLATFORM == 201402L | |
#define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT) | |
# elif __cplusplus == 201103L || GLM_LANG_PLATFORM == 201103L | |
#define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT) | |
# elif defined(__INTEL_CXX11_MODE__) || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__) | |
#define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_EXT) | |
# elif __cplusplus == 199711L | |
#define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT) | |
# else | |
#define GLM_LANG (0 | GLM_LANG_EXT) | |
# endif | |
#endif | |
# 554 "glm-amalgamated/glm.h" | |
#if GLM_PLATFORM == GLM_PLATFORM_ANDROID && !defined(GLM_LANG_STL11_FORCED) | |
#define GLM_HAS_CXX11_STL 0 | |
#elif GLM_COMPILER & GLM_COMPILER_CLANG | |
# if (defined(_LIBCPP_VERSION) || (GLM_LANG & GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED)) | |
#define GLM_HAS_CXX11_STL 1 | |
# else | |
#define GLM_HAS_CXX11_STL 0 | |
# endif | |
#elif GLM_LANG & GLM_LANG_CXX11_FLAG | |
#define GLM_HAS_CXX11_STL 1 | |
#else | |
#define GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ | |
((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \ | |
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ | |
((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) && (GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)))) | |
#endif | |
#if GLM_COMPILER & GLM_COMPILER_CLANG | |
#define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert) | |
#elif GLM_LANG & GLM_LANG_CXX11_FLAG | |
#define GLM_HAS_STATIC_ASSERT 1 | |
#else | |
#define GLM_HAS_STATIC_ASSERT ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ | |
((GLM_COMPILER & GLM_COMPILER_CUDA)) || \ | |
((GLM_COMPILER & GLM_COMPILER_VC)))) | |
#endif | |
#if GLM_LANG & GLM_LANG_CXX11_FLAG | |
#define GLM_HAS_EXTENDED_INTEGER_TYPE 1 | |
#else | |
#define GLM_HAS_EXTENDED_INTEGER_TYPE (\ | |
((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC)) || \ | |
((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \ | |
((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG))) | |
#endif | |
#if GLM_COMPILER & GLM_COMPILER_CLANG | |
#define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers) | |
#elif GLM_LANG & GLM_LANG_CXX11_FLAG | |
#define GLM_HAS_INITIALIZER_LISTS 1 | |
#else | |
#define GLM_HAS_INITIALIZER_LISTS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ | |
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \ | |
((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \ | |
((GLM_COMPILER & GLM_COMPILER_CUDA)))) | |
#endif | |
#if GLM_COMPILER & GLM_COMPILER_CLANG | |
#define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions) | |
#elif GLM_LANG & GLM_LANG_CXX11_FLAG | |
#define GLM_HAS_UNRESTRICTED_UNIONS 1 | |
#else | |
#define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ | |
(GLM_COMPILER & GLM_COMPILER_VC) || \ | |
((GLM_COMPILER & GLM_COMPILER_CUDA))) | |
#endif | |
#if GLM_COMPILER & GLM_COMPILER_CLANG | |
#define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions) | |
#elif GLM_LANG & GLM_LANG_CXX11_FLAG | |
#define GLM_HAS_DEFAULTED_FUNCTIONS 1 | |
#else | |
#define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ | |
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ | |
((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ | |
(GLM_COMPILER & GLM_COMPILER_CUDA))) | |
#endif | |
#if GLM_COMPILER & GLM_COMPILER_CLANG | |
#define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references) | |
#elif GLM_LANG & GLM_LANG_CXX11_FLAG | |
#define GLM_HAS_RVALUE_REFERENCES 1 | |
#else | |
#define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ | |
((GLM_COMPILER & GLM_COMPILER_VC)) || \ | |
((GLM_COMPILER & GLM_COMPILER_CUDA)))) | |
#endif | |
#if GLM_COMPILER & GLM_COMPILER_CLANG | |
#define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions) | |
#elif GLM_LANG & GLM_LANG_CXX11_FLAG | |
#define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1 | |
#else | |
#define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ | |
((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \ | |
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ | |
((GLM_COMPILER & GLM_COMPILER_CUDA)))) | |
#endif | |
#if GLM_COMPILER & GLM_COMPILER_CLANG | |
#define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates) | |
#elif GLM_LANG & GLM_LANG_CXX11_FLAG | |
#define GLM_HAS_TEMPLATE_ALIASES 1 | |
#else | |
#define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ | |
((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ | |
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ | |
((GLM_COMPILER & GLM_COMPILER_CUDA)))) | |
#endif | |
#if GLM_COMPILER & GLM_COMPILER_CLANG | |
#define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for) | |
#elif GLM_LANG & GLM_LANG_CXX11_FLAG | |
#define GLM_HAS_RANGE_FOR 1 | |
#else | |
#define GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ | |
((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ | |
((GLM_COMPILER & GLM_COMPILER_VC)) || \ | |
((GLM_COMPILER & GLM_COMPILER_CUDA)))) | |
#endif | |
#if GLM_COMPILER & GLM_COMPILER_CLANG | |
#define GLM_HAS_ALIGNOF __has_feature(cxx_alignas) | |
#elif GLM_LANG & GLM_LANG_CXX11_FLAG | |
#define GLM_HAS_ALIGNOF 1 | |
#else | |
#define GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ | |
((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \ | |
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)) || \ | |
((GLM_COMPILER & GLM_COMPILER_CUDA)))) | |
#endif | |
#if (GLM_ARCH & GLM_ARCH_SIMD_BIT) | |
#define GLM_HAS_CONSTEXPR 0 | |
#elif (GLM_COMPILER & GLM_COMPILER_CLANG) | |
#define GLM_HAS_CONSTEXPR __has_feature(cxx_relaxed_constexpr) | |
#elif (GLM_LANG & GLM_LANG_CXX14_FLAG) | |
#define GLM_HAS_CONSTEXPR 1 | |
#else | |
#define GLM_HAS_CONSTEXPR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && GLM_HAS_INITIALIZER_LISTS && (\ | |
((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL17)) || \ | |
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)))) | |
#endif | |
#if GLM_HAS_CONSTEXPR | |
#define GLM_CONSTEXPR constexpr | |
#else | |
#define GLM_CONSTEXPR | |
#endif | |
#if GLM_HAS_CONSTEXPR | |
# if (GLM_COMPILER & GLM_COMPILER_CLANG) | |
# if __has_feature(cxx_if_constexpr) | |
#define GLM_HAS_IF_CONSTEXPR 1 | |
# else | |
#define GLM_HAS_IF_CONSTEXPR 0 | |
# endif | |
# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) | |
#define GLM_HAS_IF_CONSTEXPR 1 | |
# else | |
#define GLM_HAS_IF_CONSTEXPR 0 | |
# endif | |
#else | |
#define GLM_HAS_IF_CONSTEXPR 0 | |
#endif | |
#if GLM_HAS_IF_CONSTEXPR | |
#define GLM_IF_CONSTEXPR if constexpr | |
#else | |
#define GLM_IF_CONSTEXPR if | |
#endif | |
#if GLM_LANG & GLM_LANG_CXX11_FLAG | |
#define GLM_HAS_ASSIGNABLE 1 | |
#else | |
#define GLM_HAS_ASSIGNABLE ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ | |
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \ | |
((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49)))) | |
#endif | |
#define GLM_HAS_TRIVIAL_QUERIES 0 | |
#if GLM_LANG & GLM_LANG_CXX11_FLAG | |
#define GLM_HAS_MAKE_SIGNED 1 | |
#else | |
#define GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ | |
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ | |
((GLM_COMPILER & GLM_COMPILER_CUDA)))) | |
#endif | |
#if defined(GLM_FORCE_INTRINSICS) | |
#define GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\ | |
((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ | |
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14) && (GLM_ARCH & GLM_ARCH_X86_BIT)))) | |
#else | |
#define GLM_HAS_BITSCAN_WINDOWS 0 | |
#endif | |
#ifdef _OPENMP | |
# if GLM_COMPILER & GLM_COMPILER_GCC | |
# if GLM_COMPILER >= GLM_COMPILER_GCC61 | |
#define GLM_HAS_OPENMP 45 | |
# elif GLM_COMPILER >= GLM_COMPILER_GCC49 | |
#define GLM_HAS_OPENMP 40 | |
# elif GLM_COMPILER >= GLM_COMPILER_GCC47 | |
#define GLM_HAS_OPENMP 31 | |
# else | |
#define GLM_HAS_OPENMP 0 | |
# endif | |
# elif GLM_COMPILER & GLM_COMPILER_CLANG | |
# if GLM_COMPILER >= GLM_COMPILER_CLANG38 | |
#define GLM_HAS_OPENMP 31 | |
# else | |
#define GLM_HAS_OPENMP 0 | |
# endif | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
#define GLM_HAS_OPENMP 20 | |
# elif GLM_COMPILER & GLM_COMPILER_INTEL | |
# if GLM_COMPILER >= GLM_COMPILER_INTEL16 | |
#define GLM_HAS_OPENMP 40 | |
# else | |
#define GLM_HAS_OPENMP 0 | |
# endif | |
# else | |
#define GLM_HAS_OPENMP 0 | |
# endif | |
#else | |
#define GLM_HAS_OPENMP 0 | |
#endif | |
#if GLM_LANG & GLM_LANG_CXX0X_FLAG | |
#define GLM_CONFIG_NULLPTR GLM_ENABLE | |
#else | |
#define GLM_CONFIG_NULLPTR GLM_DISABLE | |
#endif | |
#if GLM_CONFIG_NULLPTR == GLM_ENABLE | |
#define GLM_NULLPTR nullptr | |
#else | |
#define GLM_NULLPTR 0 | |
#endif | |
#if GLM_HAS_STATIC_ASSERT | |
#define GLM_STATIC_ASSERT(x,message) static_assert(x, message) | |
#elif GLM_COMPILER & GLM_COMPILER_VC | |
#define GLM_STATIC_ASSERT(x,message) typedef char __CASSERT__ ##__LINE__[(x) ? 1 : -1] | |
#else | |
#define GLM_STATIC_ASSERT(x,message) assert(x) | |
#endif | |
#if 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 defined(GLM_FORCE_INLINE) | |
# if GLM_COMPILER & GLM_COMPILER_VC | |
#define GLM_INLINE __forceinline | |
#define GLM_NEVER_INLINE __declspec((noinline)) | |
# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) | |
#define GLM_INLINE inline __attribute__((__always_inline__)) | |
#define GLM_NEVER_INLINE __attribute__((__noinline__)) | |
# elif GLM_COMPILER & GLM_COMPILER_CUDA | |
#define GLM_INLINE __forceinline__ | |
#define GLM_NEVER_INLINE __noinline__ | |
# else | |
#define GLM_INLINE inline | |
#define GLM_NEVER_INLINE | |
# endif | |
#else | |
#define GLM_INLINE inline | |
#define GLM_NEVER_INLINE | |
#endif | |
#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL | |
#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE | |
#define GLM_SWIZZLE_DISABLED 0 | |
#define GLM_SWIZZLE_OPERATOR 1 | |
#define GLM_SWIZZLE_FUNCTION 2 | |
#if defined(GLM_FORCE_XYZW_ONLY) | |
#undef GLM_FORCE_SWIZZLE | |
#endif | |
#if defined(GLM_SWIZZLE) | |
# 866 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead.") | |
# 866 "glm-amalgamated/glm.h" | |
#define GLM_FORCE_SWIZZLE | |
#endif | |
#if defined(GLM_FORCE_SWIZZLE) && (GLM_LANG & GLM_LANG_CXXMS_FLAG) | |
#define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_OPERATOR | |
#elif defined(GLM_FORCE_SWIZZLE) | |
#define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_FUNCTION | |
#else | |
#define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_DISABLED | |
#endif | |
#ifdef GLM_FORCE_UNRESTRICTED_GENTYPE | |
#define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_ENABLE | |
#else | |
#define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_DISABLE | |
#endif | |
#define GLM_CLIP_CONTROL_ZO_BIT (1 << 0) | |
#define GLM_CLIP_CONTROL_NO_BIT (1 << 1) | |
#define GLM_CLIP_CONTROL_LH_BIT (1 << 2) | |
#define GLM_CLIP_CONTROL_RH_BIT (1 << 3) | |
#define GLM_CLIP_CONTROL_LH_ZO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_ZO_BIT) | |
#define GLM_CLIP_CONTROL_LH_NO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_NO_BIT) | |
#define GLM_CLIP_CONTROL_RH_ZO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_ZO_BIT) | |
#define GLM_CLIP_CONTROL_RH_NO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_NO_BIT) | |
#ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE | |
# ifdef GLM_FORCE_LEFT_HANDED | |
#define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_ZO | |
# else | |
#define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_ZO | |
# endif | |
#else | |
# ifdef GLM_FORCE_LEFT_HANDED | |
#define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_NO | |
# else | |
#define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_NO | |
# endif | |
#endif | |
#if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)) | |
#define GLM_DEPRECATED __declspec(deprecated) | |
#define GLM_ALIGNED_TYPEDEF(type,name,alignment) typedef __declspec(align(alignment)) type name | |
#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL) | |
#define GLM_DEPRECATED __attribute__((__deprecated__)) | |
#define GLM_ALIGNED_TYPEDEF(type,name,alignment) typedef type name __attribute__((aligned(alignment))) | |
#elif GLM_COMPILER & GLM_COMPILER_CUDA | |
#define GLM_DEPRECATED | |
#define GLM_ALIGNED_TYPEDEF(type,name,alignment) typedef type name __align__(x) | |
#else | |
#define GLM_DEPRECATED | |
#define GLM_ALIGNED_TYPEDEF(type,name,alignment) typedef type name | |
#endif | |
#ifdef GLM_FORCE_EXPLICIT_CTOR | |
#define GLM_EXPLICIT explicit | |
#else | |
#define GLM_EXPLICIT | |
#endif | |
#if GLM_COMPILER==GLM_COMPILER_SYCL | |
#include <CL/sycl.hpp> | |
#include <limits> | |
namespace glm { | |
namespace std { | |
using namespace cl::sycl; | |
template<typename T> | |
using numeric_limits = ::std::numeric_limits<T>; | |
using ::std::size_t; | |
using ::std::uint8_t; | |
using ::std::uint16_t; | |
using ::std::uint32_t; | |
using ::std::uint64_t; | |
using ::std::int8_t; | |
using ::std::int16_t; | |
using ::std::int32_t; | |
using ::std::int64_t; | |
using ::std::make_unsigned; | |
} | |
} | |
#endif | |
# 991 "glm-amalgamated/glm.h" | |
#define GLM_LENGTH_INT 1 | |
#define GLM_LENGTH_SIZE_T 2 | |
#ifdef GLM_FORCE_SIZE_T_LENGTH | |
#define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_SIZE_T | |
#else | |
#define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_INT | |
#endif | |
namespace glm | |
{ | |
using std::size_t; | |
# if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T | |
typedef size_t length_t; | |
# else | |
typedef int length_t; | |
# endif | |
} | |
#if GLM_HAS_CONSTEXPR | |
#define GLM_CONFIG_CONSTEXP GLM_ENABLE | |
namespace glm | |
{ | |
template<typename T, std::size_t N> | |
constexpr std::size_t countof(T const (&)[N]) | |
{ | |
return N; | |
} | |
} | |
#define GLM_COUNTOF(arr) glm::countof(arr) | |
#elif defined(_MSC_VER) | |
#define GLM_CONFIG_CONSTEXP GLM_DISABLE | |
#define GLM_COUNTOF(arr) _countof(arr) | |
#else | |
#define GLM_CONFIG_CONSTEXP GLM_DISABLE | |
#define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0]) | |
#endif | |
namespace glm{ | |
namespace detail | |
{ | |
template<typename T> | |
struct is_int | |
{ | |
enum test {value = 0}; | |
}; | |
template<> | |
struct is_int<unsigned int> | |
{ | |
enum test {value = ~0}; | |
}; | |
template<> | |
struct is_int<signed int> | |
{ | |
enum test {value = ~0}; | |
}; | |
} | |
typedef unsigned int uint; | |
} | |
#if GLM_HAS_EXTENDED_INTEGER_TYPE | |
# include <cstdint> | |
#endif | |
namespace glm{ | |
namespace detail | |
{ | |
# if GLM_HAS_EXTENDED_INTEGER_TYPE | |
typedef std::uint64_t uint64; | |
typedef std::int64_t int64; | |
# elif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) | |
typedef uint64_t uint64; | |
typedef int64_t int64; | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
typedef unsigned __int64 uint64; | |
typedef signed __int64 int64; | |
# elif GLM_COMPILER & GLM_COMPILER_GCC | |
#pragma GCC diagnostic ignored "-Wlong-long" | |
__extension__ typedef unsigned long long uint64; | |
__extension__ typedef signed long long int64; | |
# elif (GLM_COMPILER & GLM_COMPILER_CLANG) | |
#pragma clang diagnostic ignored "-Wc++11-long-long" | |
typedef unsigned long long uint64; | |
typedef signed long long int64; | |
# else | |
typedef unsigned long long uint64; | |
typedef signed long long int64; | |
# endif | |
} | |
} | |
#if GLM_HAS_MAKE_SIGNED | |
# include <type_traits> | |
namespace glm{ | |
namespace detail | |
{ | |
using std::make_unsigned; | |
} | |
} | |
#else | |
namespace glm{ | |
namespace detail | |
{ | |
template<typename genType> | |
struct make_unsigned | |
{}; | |
template<> | |
struct make_unsigned<char> | |
{ | |
typedef unsigned char type; | |
}; | |
template<> | |
struct make_unsigned<signed char> | |
{ | |
typedef unsigned char type; | |
}; | |
template<> | |
struct make_unsigned<short> | |
{ | |
typedef unsigned short type; | |
}; | |
template<> | |
struct make_unsigned<int> | |
{ | |
typedef unsigned int type; | |
}; | |
template<> | |
struct make_unsigned<long> | |
{ | |
typedef unsigned long type; | |
}; | |
template<> | |
struct make_unsigned<int64> | |
{ | |
typedef uint64 type; | |
}; | |
template<> | |
struct make_unsigned<unsigned char> | |
{ | |
typedef unsigned char type; | |
}; | |
template<> | |
struct make_unsigned<unsigned short> | |
{ | |
typedef unsigned short type; | |
}; | |
template<> | |
struct make_unsigned<unsigned int> | |
{ | |
typedef unsigned int type; | |
}; | |
template<> | |
struct make_unsigned<unsigned long> | |
{ | |
typedef unsigned long type; | |
}; | |
template<> | |
struct make_unsigned<uint64> | |
{ | |
typedef uint64 type; | |
}; | |
} | |
} | |
#endif | |
#ifdef GLM_FORCE_XYZW_ONLY | |
#define GLM_CONFIG_XYZW_ONLY GLM_ENABLE | |
#else | |
#define GLM_CONFIG_XYZW_ONLY GLM_DISABLE | |
#endif | |
#define GLM_CTOR_INIT_DISABLE 0 | |
#define GLM_CTOR_INITIALIZER_LIST 1 | |
#define GLM_CTOR_INITIALISATION 2 | |
#if defined(GLM_FORCE_CTOR_INIT) && GLM_HAS_INITIALIZER_LISTS | |
#define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALIZER_LIST | |
#elif defined(GLM_FORCE_CTOR_INIT) && !GLM_HAS_INITIALIZER_LISTS | |
#define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALISATION | |
#else | |
#define GLM_CONFIG_CTOR_INIT GLM_CTOR_INIT_DISABLE | |
#endif | |
#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (GLM_ARCH & GLM_ARCH_SIMD_BIT) | |
#define GLM_CONFIG_SIMD GLM_ENABLE | |
#else | |
#define GLM_CONFIG_SIMD GLM_DISABLE | |
#endif | |
#if GLM_HAS_DEFAULTED_FUNCTIONS && GLM_CONFIG_CTOR_INIT == GLM_CTOR_INIT_DISABLE | |
#define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_ENABLE | |
#define GLM_DEFAULT = default | |
#else | |
#define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_DISABLE | |
#define GLM_DEFAULT | |
#endif | |
#ifdef GLM_FORCE_ALIGNED | |
#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES | |
#endif | |
#ifdef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES | |
#define GLM_FORCE_ALIGNED_GENTYPES | |
#endif | |
#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (defined(GLM_FORCE_ALIGNED_GENTYPES) || (GLM_CONFIG_SIMD == GLM_ENABLE)) | |
#define GLM_CONFIG_ALIGNED_GENTYPES GLM_ENABLE | |
#else | |
#define GLM_CONFIG_ALIGNED_GENTYPES GLM_DISABLE | |
#endif | |
#if ((GLM_CONFIG_SIMD == GLM_ENABLE) || (GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR) || (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE)) | |
#define GLM_CONFIG_ANONYMOUS_STRUCT GLM_ENABLE | |
#else | |
#define GLM_CONFIG_ANONYMOUS_STRUCT GLM_DISABLE | |
#endif | |
#ifdef GLM_FORCE_SILENT_WARNINGS | |
#define GLM_SILENT_WARNINGS GLM_ENABLE | |
#else | |
#define GLM_SILENT_WARNINGS GLM_DISABLE | |
#endif | |
#define GLM_HIGHP 1 | |
#define GLM_MEDIUMP 2 | |
#define GLM_LOWP 3 | |
#if defined(GLM_FORCE_PRECISION_HIGHP_BOOL) || defined(GLM_PRECISION_HIGHP_BOOL) | |
#define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP | |
#elif defined(GLM_FORCE_PRECISION_MEDIUMP_BOOL) || defined(GLM_PRECISION_MEDIUMP_BOOL) | |
#define GLM_CONFIG_PRECISION_BOOL GLM_MEDIUMP | |
#elif defined(GLM_FORCE_PRECISION_LOWP_BOOL) || defined(GLM_PRECISION_LOWP_BOOL) | |
#define GLM_CONFIG_PRECISION_BOOL GLM_LOWP | |
#else | |
#define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP | |
#endif | |
#if defined(GLM_FORCE_PRECISION_HIGHP_INT) || defined(GLM_PRECISION_HIGHP_INT) | |
#define GLM_CONFIG_PRECISION_INT GLM_HIGHP | |
#elif defined(GLM_FORCE_PRECISION_MEDIUMP_INT) || defined(GLM_PRECISION_MEDIUMP_INT) | |
#define GLM_CONFIG_PRECISION_INT GLM_MEDIUMP | |
#elif defined(GLM_FORCE_PRECISION_LOWP_INT) || defined(GLM_PRECISION_LOWP_INT) | |
#define GLM_CONFIG_PRECISION_INT GLM_LOWP | |
#else | |
#define GLM_CONFIG_PRECISION_INT GLM_HIGHP | |
#endif | |
#if defined(GLM_FORCE_PRECISION_HIGHP_UINT) || defined(GLM_PRECISION_HIGHP_UINT) | |
#define GLM_CONFIG_PRECISION_UINT GLM_HIGHP | |
#elif defined(GLM_FORCE_PRECISION_MEDIUMP_UINT) || defined(GLM_PRECISION_MEDIUMP_UINT) | |
#define GLM_CONFIG_PRECISION_UINT GLM_MEDIUMP | |
#elif defined(GLM_FORCE_PRECISION_LOWP_UINT) || defined(GLM_PRECISION_LOWP_UINT) | |
#define GLM_CONFIG_PRECISION_UINT GLM_LOWP | |
#else | |
#define GLM_CONFIG_PRECISION_UINT GLM_HIGHP | |
#endif | |
#if defined(GLM_FORCE_PRECISION_HIGHP_FLOAT) || defined(GLM_PRECISION_HIGHP_FLOAT) | |
#define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP | |
#elif defined(GLM_FORCE_PRECISION_MEDIUMP_FLOAT) || defined(GLM_PRECISION_MEDIUMP_FLOAT) | |
#define GLM_CONFIG_PRECISION_FLOAT GLM_MEDIUMP | |
#elif defined(GLM_FORCE_PRECISION_LOWP_FLOAT) || defined(GLM_PRECISION_LOWP_FLOAT) | |
#define GLM_CONFIG_PRECISION_FLOAT GLM_LOWP | |
#else | |
#define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP | |
#endif | |
#if defined(GLM_FORCE_PRECISION_HIGHP_DOUBLE) || defined(GLM_PRECISION_HIGHP_DOUBLE) | |
#define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP | |
#elif defined(GLM_FORCE_PRECISION_MEDIUMP_DOUBLE) || defined(GLM_PRECISION_MEDIUMP_DOUBLE) | |
#define GLM_CONFIG_PRECISION_DOUBLE GLM_MEDIUMP | |
#elif defined(GLM_FORCE_PRECISION_LOWP_DOUBLE) || defined(GLM_PRECISION_LOWP_DOUBLE) | |
#define GLM_CONFIG_PRECISION_DOUBLE GLM_LOWP | |
#else | |
#define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP | |
#endif | |
#elif ((GLM_SETUP_INCLUDED != GLM_VERSION) && !defined(GLM_FORCE_IGNORE_VERSION)) | |
# error "GLM error: A different version of GLM is already included. Define GLM_FORCE_IGNORE_VERSION before including GLM headers to ignore this error." | |
#elif GLM_SETUP_INCLUDED == GLM_VERSION | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_DISPLAYED) | |
#define GLM_MESSAGE_DISPLAYED | |
#define GLM_STR_HELPER(x) #x | |
#define GLM_STR(x) GLM_STR_HELPER(x) | |
# 1340 "glm-amalgamated/glm.h" | |
#pragma message (GLM_STR(GLM_VERSION_MESSAGE)) | |
# 1340 "glm-amalgamated/glm.h" | |
# if (GLM_LANG & GLM_LANG_CXX2A_FLAG) && (GLM_LANG & GLM_LANG_EXT) | |
# 1344 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ 2A with extensions") | |
# 1344 "glm-amalgamated/glm.h" | |
# elif (GLM_LANG & GLM_LANG_CXX2A_FLAG) | |
# 1346 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ 2A") | |
# 1346 "glm-amalgamated/glm.h" | |
# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) && (GLM_LANG & GLM_LANG_EXT) | |
# 1348 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ 17 with extensions") | |
# 1348 "glm-amalgamated/glm.h" | |
# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) | |
# 1350 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ 17") | |
# 1350 "glm-amalgamated/glm.h" | |
# elif (GLM_LANG & GLM_LANG_CXX14_FLAG) && (GLM_LANG & GLM_LANG_EXT) | |
# 1352 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ 14 with extensions") | |
# 1352 "glm-amalgamated/glm.h" | |
# elif (GLM_LANG & GLM_LANG_CXX14_FLAG) | |
# 1354 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ 14") | |
# 1354 "glm-amalgamated/glm.h" | |
# elif (GLM_LANG & GLM_LANG_CXX11_FLAG) && (GLM_LANG & GLM_LANG_EXT) | |
# 1356 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ 11 with extensions") | |
# 1356 "glm-amalgamated/glm.h" | |
# elif (GLM_LANG & GLM_LANG_CXX11_FLAG) | |
# 1358 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ 11") | |
# 1358 "glm-amalgamated/glm.h" | |
# elif (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_LANG & GLM_LANG_EXT) | |
# 1360 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ 0x with extensions") | |
# 1360 "glm-amalgamated/glm.h" | |
# elif (GLM_LANG & GLM_LANG_CXX0X_FLAG) | |
# 1362 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ 0x") | |
# 1362 "glm-amalgamated/glm.h" | |
# elif (GLM_LANG & GLM_LANG_CXX03_FLAG) && (GLM_LANG & GLM_LANG_EXT) | |
# 1364 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ 03 with extensions") | |
# 1364 "glm-amalgamated/glm.h" | |
# elif (GLM_LANG & GLM_LANG_CXX03_FLAG) | |
# 1366 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ 03") | |
# 1366 "glm-amalgamated/glm.h" | |
# elif (GLM_LANG & GLM_LANG_CXX98_FLAG) && (GLM_LANG & GLM_LANG_EXT) | |
# 1368 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ 98 with extensions") | |
# 1368 "glm-amalgamated/glm.h" | |
# elif (GLM_LANG & GLM_LANG_CXX98_FLAG) | |
# 1370 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ 98") | |
# 1370 "glm-amalgamated/glm.h" | |
# else | |
# 1372 "glm-amalgamated/glm.h" | |
#pragma message("GLM: C++ language undetected") | |
# 1372 "glm-amalgamated/glm.h" | |
# endif | |
# if GLM_COMPILER & GLM_COMPILER_CUDA | |
# 1377 "glm-amalgamated/glm.h" | |
#pragma message("GLM: CUDA compiler detected") | |
# 1377 "glm-amalgamated/glm.h" | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
# 1379 "glm-amalgamated/glm.h" | |
#pragma message("GLM: Visual C++ compiler detected") | |
# 1379 "glm-amalgamated/glm.h" | |
# elif GLM_COMPILER & GLM_COMPILER_CLANG | |
# 1381 "glm-amalgamated/glm.h" | |
#pragma message("GLM: Clang compiler detected") | |
# 1381 "glm-amalgamated/glm.h" | |
# elif GLM_COMPILER & GLM_COMPILER_INTEL | |
# 1383 "glm-amalgamated/glm.h" | |
#pragma message("GLM: Intel Compiler detected") | |
# 1383 "glm-amalgamated/glm.h" | |
# elif GLM_COMPILER & GLM_COMPILER_GCC | |
# 1385 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GCC compiler detected") | |
# 1385 "glm-amalgamated/glm.h" | |
# else | |
# 1387 "glm-amalgamated/glm.h" | |
#pragma message("GLM: Compiler not detected") | |
# 1387 "glm-amalgamated/glm.h" | |
# endif | |
# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_64) | |
# 1392 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 64 bits with AVX2 instruction set build target") | |
# 1392 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_32) | |
# 1394 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 32 bits with AVX2 instruction set build target") | |
# 1394 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_64) | |
# 1397 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 64 bits with AVX instruction set build target") | |
# 1397 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_32) | |
# 1399 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 32 bits with AVX instruction set build target") | |
# 1399 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_64) | |
# 1402 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 64 bits with SSE4.2 instruction set build target") | |
# 1402 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_32) | |
# 1404 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 32 bits with SSE4.2 instruction set build target") | |
# 1404 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_64) | |
# 1407 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 64 bits with SSE4.1 instruction set build target") | |
# 1407 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_32) | |
# 1409 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 32 bits with SSE4.1 instruction set build target") | |
# 1409 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_64) | |
# 1412 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 64 bits with SSSE3 instruction set build target") | |
# 1412 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_32) | |
# 1414 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 32 bits with SSSE3 instruction set build target") | |
# 1414 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_64) | |
# 1417 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 64 bits with SSE3 instruction set build target") | |
# 1417 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_32) | |
# 1419 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 32 bits with SSE3 instruction set build target") | |
# 1419 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_64) | |
# 1422 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 64 bits with SSE2 instruction set build target") | |
# 1422 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_32) | |
# 1424 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 32 bits with SSE2 instruction set build target") | |
# 1424 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_64) | |
# 1427 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 64 bits build target") | |
# 1427 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_32) | |
# 1429 "glm-amalgamated/glm.h" | |
#pragma message("GLM: x86 32 bits build target") | |
# 1429 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_64) | |
# 1432 "glm-amalgamated/glm.h" | |
#pragma message("GLM: ARM 64 bits with Neon instruction set build target") | |
# 1432 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_32) | |
# 1434 "glm-amalgamated/glm.h" | |
#pragma message("GLM: ARM 32 bits with Neon instruction set build target") | |
# 1434 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_64) | |
# 1437 "glm-amalgamated/glm.h" | |
#pragma message("GLM: ARM 64 bits build target") | |
# 1437 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_32) | |
# 1439 "glm-amalgamated/glm.h" | |
#pragma message("GLM: ARM 32 bits build target") | |
# 1439 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_64) | |
# 1442 "glm-amalgamated/glm.h" | |
#pragma message("GLM: MIPS 64 bits build target") | |
# 1442 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_32) | |
# 1444 "glm-amalgamated/glm.h" | |
#pragma message("GLM: MIPS 32 bits build target") | |
# 1444 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_64) | |
# 1447 "glm-amalgamated/glm.h" | |
#pragma message("GLM: PowerPC 64 bits build target") | |
# 1447 "glm-amalgamated/glm.h" | |
# elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_32) | |
# 1449 "glm-amalgamated/glm.h" | |
#pragma message("GLM: PowerPC 32 bits build target") | |
# 1449 "glm-amalgamated/glm.h" | |
# else | |
# 1451 "glm-amalgamated/glm.h" | |
#pragma message("GLM: Unknown build target") | |
# 1451 "glm-amalgamated/glm.h" | |
# endif | |
# if(GLM_PLATFORM & GLM_PLATFORM_QNXNTO) | |
# 1456 "glm-amalgamated/glm.h" | |
#pragma message("GLM: QNX platform detected") | |
# 1456 "glm-amalgamated/glm.h" | |
# elif(GLM_PLATFORM & GLM_PLATFORM_APPLE) | |
# 1460 "glm-amalgamated/glm.h" | |
#pragma message("GLM: Apple platform detected") | |
# 1460 "glm-amalgamated/glm.h" | |
# elif(GLM_PLATFORM & GLM_PLATFORM_WINCE) | |
# 1462 "glm-amalgamated/glm.h" | |
#pragma message("GLM: WinCE platform detected") | |
# 1462 "glm-amalgamated/glm.h" | |
# elif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS) | |
# 1464 "glm-amalgamated/glm.h" | |
#pragma message("GLM: Windows platform detected") | |
# 1464 "glm-amalgamated/glm.h" | |
# elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL) | |
# 1466 "glm-amalgamated/glm.h" | |
#pragma message("GLM: Native Client detected") | |
# 1466 "glm-amalgamated/glm.h" | |
# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) | |
# 1468 "glm-amalgamated/glm.h" | |
#pragma message("GLM: Android platform detected") | |
# 1468 "glm-amalgamated/glm.h" | |
# elif(GLM_PLATFORM & GLM_PLATFORM_LINUX) | |
# 1470 "glm-amalgamated/glm.h" | |
#pragma message("GLM: Linux platform detected") | |
# 1470 "glm-amalgamated/glm.h" | |
# elif(GLM_PLATFORM & GLM_PLATFORM_UNIX) | |
# 1472 "glm-amalgamated/glm.h" | |
#pragma message("GLM: UNIX platform detected") | |
# 1472 "glm-amalgamated/glm.h" | |
# elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN) | |
# 1474 "glm-amalgamated/glm.h" | |
#pragma message("GLM: platform unknown") | |
# 1474 "glm-amalgamated/glm.h" | |
# else | |
# 1476 "glm-amalgamated/glm.h" | |
#pragma message("GLM: platform not detected") | |
# 1476 "glm-amalgamated/glm.h" | |
# endif | |
# if defined GLM_FORCE_XYZW_ONLY | |
# 1481 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_XYZW_ONLY is defined. Only x, y, z and w component are available in vector type. This define disables swizzle operators and SIMD instruction sets.") | |
# 1481 "glm-amalgamated/glm.h" | |
# endif | |
# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR | |
# 1486 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling operators enabled.") | |
# 1486 "glm-amalgamated/glm.h" | |
# elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION | |
# 1488 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling functions enabled. Enable compiler C++ language extensions to enable swizzle operators.") | |
# 1488 "glm-amalgamated/glm.h" | |
# else | |
# 1490 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.") | |
# 1490 "glm-amalgamated/glm.h" | |
# endif | |
# if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T | |
# 1495 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is defined. .length() returns a glm::length_t, a typedef of std::size_t.") | |
# 1495 "glm-amalgamated/glm.h" | |
# else | |
# 1497 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.") | |
# 1497 "glm-amalgamated/glm.h" | |
# endif | |
# if GLM_CONFIG_UNRESTRICTED_GENTYPE == GLM_ENABLE | |
# 1501 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is defined. Removes GLSL restrictions on valid function genTypes.") | |
# 1501 "glm-amalgamated/glm.h" | |
# else | |
# 1503 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.") | |
# 1503 "glm-amalgamated/glm.h" | |
# endif | |
# if GLM_SILENT_WARNINGS == GLM_ENABLE | |
# 1507 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is defined. Ignores C++ warnings from using C++ language extensions.") | |
# 1507 "glm-amalgamated/glm.h" | |
# else | |
# 1509 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is undefined. Shows C++ warnings from using C++ language extensions.") | |
# 1509 "glm-amalgamated/glm.h" | |
# endif | |
# ifdef GLM_FORCE_SINGLE_ONLY | |
# 1513 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_SINGLE_ONLY is defined. Using only single precision floating-point types.") | |
# 1513 "glm-amalgamated/glm.h" | |
# endif | |
# if defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE) | |
#undef GLM_FORCE_ALIGNED_GENTYPES | |
# 1518 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined, allowing aligned types. This prevents the use of C++ constexpr.") | |
# 1518 "glm-amalgamated/glm.h" | |
# elif defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE) | |
#undef GLM_FORCE_ALIGNED_GENTYPES | |
# 1521 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.") | |
# 1521 "glm-amalgamated/glm.h" | |
# endif | |
# if defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES) | |
# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE | |
#undef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES | |
# 1527 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.") | |
# 1527 "glm-amalgamated/glm.h" | |
# elif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE | |
# 1529 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined. All gentypes (e.g. vec3) will be aligned and padded by default.") | |
# 1529 "glm-amalgamated/glm.h" | |
# endif | |
# endif | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT | |
# 1534 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is defined. Using zero to one depth clip space.") | |
# 1534 "glm-amalgamated/glm.h" | |
# else | |
# 1536 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.") | |
# 1536 "glm-amalgamated/glm.h" | |
# endif | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT | |
# 1540 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_LEFT_HANDED is defined. Using left handed coordinate system.") | |
# 1540 "glm-amalgamated/glm.h" | |
# else | |
# 1542 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.") | |
# 1542 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
#endif | |
namespace glm | |
{ | |
enum qualifier | |
{ | |
packed_highp, | |
packed_mediump, | |
packed_lowp, | |
# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE | |
aligned_highp, | |
aligned_mediump, | |
aligned_lowp, | |
aligned = aligned_highp, | |
# endif | |
highp = packed_highp, | |
mediump = packed_mediump, | |
lowp = packed_lowp, | |
packed = packed_highp, | |
# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE && defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES) | |
defaultp = aligned_highp | |
# else | |
defaultp = highp | |
# endif | |
}; | |
typedef qualifier precision; | |
template<length_t L, typename T, qualifier Q = defaultp> struct vec; | |
template<length_t C, length_t R, typename T, qualifier Q = defaultp> struct mat; | |
template<typename T, qualifier Q = defaultp> struct qua; | |
# if GLM_HAS_TEMPLATE_ALIASES | |
template <typename T, qualifier Q = defaultp> using tvec1 = vec<1, T, Q>; | |
template <typename T, qualifier Q = defaultp> using tvec2 = vec<2, T, Q>; | |
template <typename T, qualifier Q = defaultp> using tvec3 = vec<3, T, Q>; | |
template <typename T, qualifier Q = defaultp> using tvec4 = vec<4, T, Q>; | |
template <typename T, qualifier Q = defaultp> using tmat2x2 = mat<2, 2, T, Q>; | |
template <typename T, qualifier Q = defaultp> using tmat2x3 = mat<2, 3, T, Q>; | |
template <typename T, qualifier Q = defaultp> using tmat2x4 = mat<2, 4, T, Q>; | |
template <typename T, qualifier Q = defaultp> using tmat3x2 = mat<3, 2, T, Q>; | |
template <typename T, qualifier Q = defaultp> using tmat3x3 = mat<3, 3, T, Q>; | |
template <typename T, qualifier Q = defaultp> using tmat3x4 = mat<3, 4, T, Q>; | |
template <typename T, qualifier Q = defaultp> using tmat4x2 = mat<4, 2, T, Q>; | |
template <typename T, qualifier Q = defaultp> using tmat4x3 = mat<4, 3, T, Q>; | |
template <typename T, qualifier Q = defaultp> using tmat4x4 = mat<4, 4, T, Q>; | |
template <typename T, qualifier Q = defaultp> using tquat = qua<T, Q>; | |
# endif | |
namespace detail | |
{ | |
template<glm::qualifier P> | |
struct is_aligned | |
{ | |
static const bool value = false; | |
}; | |
# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE | |
template<> | |
struct is_aligned<glm::aligned_lowp> | |
{ | |
static const bool value = true; | |
}; | |
template<> | |
struct is_aligned<glm::aligned_mediump> | |
{ | |
static const bool value = true; | |
}; | |
template<> | |
struct is_aligned<glm::aligned_highp> | |
{ | |
static const bool value = true; | |
}; | |
# endif | |
template<length_t L, typename T, bool is_aligned> | |
struct storage | |
{ | |
typedef struct type { | |
T data[L]; | |
} type; | |
}; | |
# if GLM_HAS_ALIGNOF | |
template<length_t L, typename T> | |
struct storage<L, T, true> | |
{ | |
typedef struct alignas(L * sizeof(T)) type { | |
T data[L]; | |
} type; | |
}; | |
template<typename T> | |
struct storage<3, T, true> | |
{ | |
typedef struct alignas(4 * sizeof(T)) type { | |
T data[4]; | |
} type; | |
}; | |
# endif | |
# if GLM_ARCH & GLM_ARCH_SSE2_BIT | |
template<> | |
struct storage<4, float, true> | |
{ | |
typedef glm_f32vec4 type; | |
}; | |
template<> | |
struct storage<4, int, true> | |
{ | |
typedef glm_i32vec4 type; | |
}; | |
template<> | |
struct storage<4, unsigned int, true> | |
{ | |
typedef glm_u32vec4 type; | |
}; | |
template<> | |
struct storage<2, double, true> | |
{ | |
typedef glm_f64vec2 type; | |
}; | |
template<> | |
struct storage<2, detail::int64, true> | |
{ | |
typedef glm_i64vec2 type; | |
}; | |
template<> | |
struct storage<2, detail::uint64, true> | |
{ | |
typedef glm_u64vec2 type; | |
}; | |
# endif | |
# if (GLM_ARCH & GLM_ARCH_AVX_BIT) | |
template<> | |
struct storage<4, double, true> | |
{ | |
typedef glm_f64vec4 type; | |
}; | |
# endif | |
# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) | |
template<> | |
struct storage<4, detail::int64, true> | |
{ | |
typedef glm_i64vec4 type; | |
}; | |
template<> | |
struct storage<4, detail::uint64, true> | |
{ | |
typedef glm_u64vec4 type; | |
}; | |
# endif | |
# if GLM_ARCH & GLM_ARCH_NEON_BIT | |
template<> | |
struct storage<4, float, true> | |
{ | |
typedef glm_f32vec4 type; | |
}; | |
template<> | |
struct storage<4, int, true> | |
{ | |
typedef glm_i32vec4 type; | |
}; | |
template<> | |
struct storage<4, unsigned int, true> | |
{ | |
typedef glm_u32vec4 type; | |
}; | |
# endif | |
enum genTypeEnum | |
{ | |
GENTYPE_VEC, | |
GENTYPE_MAT, | |
GENTYPE_QUAT | |
}; | |
template <typename genType> | |
struct genTypeTrait | |
{}; | |
template <length_t C, length_t R, typename T> | |
struct genTypeTrait<mat<C, R, T> > | |
{ | |
static const genTypeEnum GENTYPE = GENTYPE_MAT; | |
}; | |
template<typename genType, genTypeEnum type> | |
struct init_gentype | |
{ | |
}; | |
template<typename genType> | |
struct init_gentype<genType, GENTYPE_QUAT> | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity() | |
{ | |
return genType(1, 0, 0, 0); | |
} | |
}; | |
template<typename genType> | |
struct init_gentype<genType, GENTYPE_MAT> | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity() | |
{ | |
return genType(1); | |
} | |
}; | |
} | |
} | |
#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR | |
# include "_swizzle.hpp" | |
#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION | |
# include "_swizzle_func.hpp" | |
#endif | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
struct vec<2, T, Q> | |
{ | |
typedef T value_type; | |
typedef vec<2, T, Q> type; | |
typedef vec<2, bool, Q> bool_type; | |
# if GLM_SILENT_WARNINGS == GLM_ENABLE | |
# if GLM_COMPILER & GLM_COMPILER_GCC | |
#pragma GCC diagnostic push | |
#pragma GCC diagnostic ignored "-Wpedantic" | |
# elif GLM_COMPILER & GLM_COMPILER_CLANG | |
#pragma clang diagnostic push | |
#pragma clang diagnostic ignored "-Wgnu-anonymous-struct" | |
#pragma clang diagnostic ignored "-Wnested-anon-types" | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
#pragma warning(push) | |
#pragma warning(disable: 4201) | |
# endif | |
# endif | |
# if GLM_CONFIG_XYZW_ONLY | |
T x, y; | |
# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE | |
union | |
{ | |
struct{ T x, y; }; | |
struct{ T r, g; }; | |
struct{ T s, t; }; | |
typename detail::storage<2, T, detail::is_aligned<Q>::value>::type data; | |
# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR | |
GLM_SWIZZLE2_2_MEMBERS(T, Q, x, y) | |
GLM_SWIZZLE2_2_MEMBERS(T, Q, r, g) | |
GLM_SWIZZLE2_2_MEMBERS(T, Q, s, t) | |
GLM_SWIZZLE2_3_MEMBERS(T, Q, x, y) | |
GLM_SWIZZLE2_3_MEMBERS(T, Q, r, g) | |
GLM_SWIZZLE2_3_MEMBERS(T, Q, s, t) | |
GLM_SWIZZLE2_4_MEMBERS(T, Q, x, y) | |
GLM_SWIZZLE2_4_MEMBERS(T, Q, r, g) | |
GLM_SWIZZLE2_4_MEMBERS(T, Q, s, t) | |
# endif | |
}; | |
# else | |
union {T x, r, s;}; | |
union {T y, g, t;}; | |
# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION | |
GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, Q) | |
# endif | |
# endif | |
# if GLM_SILENT_WARNINGS == GLM_ENABLE | |
# if GLM_COMPILER & GLM_COMPILER_CLANG | |
#pragma clang diagnostic pop | |
# elif GLM_COMPILER & GLM_COMPILER_GCC | |
#pragma GCC diagnostic pop | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
#pragma warning(pop) | |
# endif | |
# endif | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;} | |
GLM_FUNC_DECL GLM_CONSTEXPR T& operator[](length_type i); | |
GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, T, P> const& v); | |
GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); | |
template<typename A, typename B> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, B y); | |
template<typename A, typename B> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, B y); | |
template<typename A, typename B> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, vec<1, B, Q> const& y); | |
template<typename A, typename B> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, vec<1, B, Q> const& y); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v); | |
# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR | |
template<int E0, int E1> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1,-1,-2> const& that) | |
{ | |
*this = that(); | |
} | |
# endif | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec const& v) GLM_DEFAULT; | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec<2, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<2, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<2, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<2, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<2, U, Q> const& v); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator++(); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator--(); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator++(int); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator--(int); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<2, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<2, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<2, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<2, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<2, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<2, U, Q> const& v); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); | |
template<qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2); | |
template<qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2); | |
} | |
#ifndef GLM_EXTERNAL_TEMPLATE | |
namespace glm{ | |
namespace detail | |
{ | |
template <typename T, bool isFloat> | |
struct compute_equal | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b) | |
{ | |
return a == b; | |
} | |
}; | |
# 2191 "glm-amalgamated/glm.h" | |
} | |
} | |
namespace glm | |
{ | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec() | |
# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE | |
: x(0), y(0) | |
# endif | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, Q> const& v) | |
: x(v.x), y(v.y) | |
{} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, P> const& v) | |
: x(v.x), y(v.y) | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T scalar) | |
: x(scalar), y(scalar) | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T _x, T _y) | |
: x(_x), y(_y) | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, U, P> const& v) | |
: x(static_cast<T>(v.x)) | |
, y(static_cast<T>(v.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, B _y) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, B _y) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, vec<1, B, Q> const& _y) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, vec<1, B, Q> const& _y) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, U, P> const& v) | |
: x(static_cast<T>(v.x)) | |
, y(static_cast<T>(v.y)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<3, U, P> const& v) | |
: x(static_cast<T>(v.x)) | |
, y(static_cast<T>(v.y)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<4, U, P> const& v) | |
: x(static_cast<T>(v.x)) | |
, y(static_cast<T>(v.y)) | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) | |
{ | |
assert(i >= 0 && i < this->length()); | |
switch(i) | |
{ | |
default: | |
case 0: | |
return x; | |
case 1: | |
return y; | |
} | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) const | |
{ | |
assert(i >= 0 && i < this->length()); | |
switch(i) | |
{ | |
default: | |
case 0: | |
return x; | |
case 1: | |
return y; | |
} | |
} | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, T, Q> const& v) | |
{ | |
this->x = v.x; | |
this->y = v.y; | |
return *this; | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, U, Q> const& v) | |
{ | |
this->x = static_cast<T>(v.x); | |
this->y = static_cast<T>(v.y); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(U scalar) | |
{ | |
this->x += static_cast<T>(scalar); | |
this->y += static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<1, U, Q> const& v) | |
{ | |
this->x += static_cast<T>(v.x); | |
this->y += static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<2, U, Q> const& v) | |
{ | |
this->x += static_cast<T>(v.x); | |
this->y += static_cast<T>(v.y); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(U scalar) | |
{ | |
this->x -= static_cast<T>(scalar); | |
this->y -= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<1, U, Q> const& v) | |
{ | |
this->x -= static_cast<T>(v.x); | |
this->y -= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<2, U, Q> const& v) | |
{ | |
this->x -= static_cast<T>(v.x); | |
this->y -= static_cast<T>(v.y); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(U scalar) | |
{ | |
this->x *= static_cast<T>(scalar); | |
this->y *= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<1, U, Q> const& v) | |
{ | |
this->x *= static_cast<T>(v.x); | |
this->y *= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<2, U, Q> const& v) | |
{ | |
this->x *= static_cast<T>(v.x); | |
this->y *= static_cast<T>(v.y); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(U scalar) | |
{ | |
this->x /= static_cast<T>(scalar); | |
this->y /= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<1, U, Q> const& v) | |
{ | |
this->x /= static_cast<T>(v.x); | |
this->y /= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<2, U, Q> const& v) | |
{ | |
this->x /= static_cast<T>(v.x); | |
this->y /= static_cast<T>(v.y); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator++() | |
{ | |
++this->x; | |
++this->y; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator--() | |
{ | |
--this->x; | |
--this->y; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator++(int) | |
{ | |
vec<2, T, Q> Result(*this); | |
++*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator--(int) | |
{ | |
vec<2, T, Q> Result(*this); | |
--*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(U scalar) | |
{ | |
this->x %= static_cast<T>(scalar); | |
this->y %= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<1, U, Q> const& v) | |
{ | |
this->x %= static_cast<T>(v.x); | |
this->y %= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<2, U, Q> const& v) | |
{ | |
this->x %= static_cast<T>(v.x); | |
this->y %= static_cast<T>(v.y); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(U scalar) | |
{ | |
this->x &= static_cast<T>(scalar); | |
this->y &= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<1, U, Q> const& v) | |
{ | |
this->x &= static_cast<T>(v.x); | |
this->y &= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<2, U, Q> const& v) | |
{ | |
this->x &= static_cast<T>(v.x); | |
this->y &= static_cast<T>(v.y); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(U scalar) | |
{ | |
this->x |= static_cast<T>(scalar); | |
this->y |= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<1, U, Q> const& v) | |
{ | |
this->x |= static_cast<T>(v.x); | |
this->y |= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<2, U, Q> const& v) | |
{ | |
this->x |= static_cast<T>(v.x); | |
this->y |= static_cast<T>(v.y); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(U scalar) | |
{ | |
this->x ^= static_cast<T>(scalar); | |
this->y ^= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<1, U, Q> const& v) | |
{ | |
this->x ^= static_cast<T>(v.x); | |
this->y ^= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<2, U, Q> const& v) | |
{ | |
this->x ^= static_cast<T>(v.x); | |
this->y ^= static_cast<T>(v.y); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(U scalar) | |
{ | |
this->x <<= static_cast<T>(scalar); | |
this->y <<= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<1, U, Q> const& v) | |
{ | |
this->x <<= static_cast<T>(v.x); | |
this->y <<= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<2, U, Q> const& v) | |
{ | |
this->x <<= static_cast<T>(v.x); | |
this->y <<= static_cast<T>(v.y); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(U scalar) | |
{ | |
this->x >>= static_cast<T>(scalar); | |
this->y >>= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<1, U, Q> const& v) | |
{ | |
this->x >>= static_cast<T>(v.x); | |
this->y >>= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<2, U, Q> const& v) | |
{ | |
this->x >>= static_cast<T>(v.x); | |
this->y >>= static_cast<T>(v.y); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v) | |
{ | |
return v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v) | |
{ | |
return vec<2, T, Q>( | |
-v.x, | |
-v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar) | |
{ | |
return vec<2, T, Q>( | |
v.x + scalar, | |
v.y + scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x + v2.x, | |
v1.y + v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v) | |
{ | |
return vec<2, T, Q>( | |
scalar + v.x, | |
scalar + v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x + v2.x, | |
v1.x + v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x + v2.x, | |
v1.y + v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar) | |
{ | |
return vec<2, T, Q>( | |
v.x - scalar, | |
v.y - scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x - v2.x, | |
v1.y - v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v) | |
{ | |
return vec<2, T, Q>( | |
scalar - v.x, | |
scalar - v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x - v2.x, | |
v1.x - v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x - v2.x, | |
v1.y - v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar) | |
{ | |
return vec<2, T, Q>( | |
v.x * scalar, | |
v.y * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x * v2.x, | |
v1.y * v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v) | |
{ | |
return vec<2, T, Q>( | |
scalar * v.x, | |
scalar * v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x * v2.x, | |
v1.x * v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x * v2.x, | |
v1.y * v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar) | |
{ | |
return vec<2, T, Q>( | |
v.x / scalar, | |
v.y / scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x / v2.x, | |
v1.y / v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v) | |
{ | |
return vec<2, T, Q>( | |
scalar / v.x, | |
scalar / v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x / v2.x, | |
v1.x / v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x / v2.x, | |
v1.y / v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar) | |
{ | |
return vec<2, T, Q>( | |
v.x % scalar, | |
v.y % scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x % v2.x, | |
v1.y % v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v) | |
{ | |
return vec<2, T, Q>( | |
scalar % v.x, | |
scalar % v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x % v2.x, | |
v1.x % v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x % v2.x, | |
v1.y % v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar) | |
{ | |
return vec<2, T, Q>( | |
v.x & scalar, | |
v.y & scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x & v2.x, | |
v1.y & v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v) | |
{ | |
return vec<2, T, Q>( | |
scalar & v.x, | |
scalar & v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x & v2.x, | |
v1.x & v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x & v2.x, | |
v1.y & v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar) | |
{ | |
return vec<2, T, Q>( | |
v.x | scalar, | |
v.y | scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x | v2.x, | |
v1.y | v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v) | |
{ | |
return vec<2, T, Q>( | |
scalar | v.x, | |
scalar | v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x | v2.x, | |
v1.x | v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x | v2.x, | |
v1.y | v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar) | |
{ | |
return vec<2, T, Q>( | |
v.x ^ scalar, | |
v.y ^ scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x ^ v2.x, | |
v1.y ^ v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v) | |
{ | |
return vec<2, T, Q>( | |
scalar ^ v.x, | |
scalar ^ v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x ^ v2.x, | |
v1.x ^ v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x ^ v2.x, | |
v1.y ^ v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar) | |
{ | |
return vec<2, T, Q>( | |
v.x << scalar, | |
v.y << scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x << v2.x, | |
v1.y << v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v) | |
{ | |
return vec<2, T, Q>( | |
scalar << v.x, | |
scalar << v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x << v2.x, | |
v1.x << v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x << v2.x, | |
v1.y << v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar) | |
{ | |
return vec<2, T, Q>( | |
v.x >> scalar, | |
v.y >> scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x >> v2.x, | |
v1.y >> v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v) | |
{ | |
return vec<2, T, Q>( | |
scalar >> v.x, | |
scalar >> v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x >> v2.x, | |
v1.x >> v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return vec<2, T, Q>( | |
v1.x >> v2.x, | |
v1.y >> v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v) | |
{ | |
return vec<2, T, Q>( | |
~v.x, | |
~v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return | |
detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x) && | |
detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.y, v2.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) | |
{ | |
return !(v1 == v2); | |
} | |
template<qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2) | |
{ | |
return vec<2, bool, Q>(v1.x && v2.x, v1.y && v2.y); | |
} | |
template<qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2) | |
{ | |
return vec<2, bool, Q>(v1.x || v2.x, v1.y || v2.y); | |
} | |
} | |
#endif | |
#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR | |
# include "_swizzle.hpp" | |
#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION | |
# include "_swizzle_func.hpp" | |
#endif | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
struct vec<3, T, Q> | |
{ | |
typedef T value_type; | |
typedef vec<3, T, Q> type; | |
typedef vec<3, bool, Q> bool_type; | |
# if GLM_SILENT_WARNINGS == GLM_ENABLE | |
# if GLM_COMPILER & GLM_COMPILER_GCC | |
#pragma GCC diagnostic push | |
#pragma GCC diagnostic ignored "-Wpedantic" | |
# elif GLM_COMPILER & GLM_COMPILER_CLANG | |
#pragma clang diagnostic push | |
#pragma clang diagnostic ignored "-Wgnu-anonymous-struct" | |
#pragma clang diagnostic ignored "-Wnested-anon-types" | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
#pragma warning(push) | |
#pragma warning(disable: 4201) | |
# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE | |
#pragma warning(disable: 4324) | |
# endif | |
# endif | |
# endif | |
# if GLM_CONFIG_XYZW_ONLY | |
T x, y, z; | |
# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE | |
union | |
{ | |
struct{ T x, y, z; }; | |
struct{ T r, g, b; }; | |
struct{ T s, t, p; }; | |
typename detail::storage<3, T, detail::is_aligned<Q>::value>::type data; | |
# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR | |
GLM_SWIZZLE3_2_MEMBERS(T, Q, x, y, z) | |
GLM_SWIZZLE3_2_MEMBERS(T, Q, r, g, b) | |
GLM_SWIZZLE3_2_MEMBERS(T, Q, s, t, p) | |
GLM_SWIZZLE3_3_MEMBERS(T, Q, x, y, z) | |
GLM_SWIZZLE3_3_MEMBERS(T, Q, r, g, b) | |
GLM_SWIZZLE3_3_MEMBERS(T, Q, s, t, p) | |
GLM_SWIZZLE3_4_MEMBERS(T, Q, x, y, z) | |
GLM_SWIZZLE3_4_MEMBERS(T, Q, r, g, b) | |
GLM_SWIZZLE3_4_MEMBERS(T, Q, s, t, p) | |
# endif | |
}; | |
# else | |
union { T x, r, s; }; | |
union { T y, g, t; }; | |
union { T z, b, p; }; | |
# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION | |
GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, Q) | |
# endif | |
# endif | |
# if GLM_SILENT_WARNINGS == GLM_ENABLE | |
# if GLM_COMPILER & GLM_COMPILER_CLANG | |
#pragma clang diagnostic pop | |
# elif GLM_COMPILER & GLM_COMPILER_GCC | |
#pragma GCC diagnostic pop | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
#pragma warning(pop) | |
# endif | |
# endif | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 3;} | |
GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); | |
GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, T, P> const& v); | |
GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(T a, T b, T c); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(X x, Y y, Z z); | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z); | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z); | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z); | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z); | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z); | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z); | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z); | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z); | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z); | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz); | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); | |
# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR | |
template<int E0, int E1, int E2> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& that) | |
{ | |
*this = that(); | |
} | |
template<int E0, int E1> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& scalar) | |
{ | |
*this = vec(v(), scalar); | |
} | |
template<int E0, int E1> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& scalar, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v) | |
{ | |
*this = vec(scalar, v()); | |
} | |
# endif | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q>& operator=(vec<3, T, Q> const& v) GLM_DEFAULT; | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator=(vec<3, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<3, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<3, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<3, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<3, U, Q> const& v); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator++(); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator--(); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator++(int); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator--(int); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<3, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<3, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<3, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<3, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<3, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<3, U, Q> const& v); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); | |
template<qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2); | |
template<qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2); | |
} | |
#ifndef GLM_EXTERNAL_TEMPLATE | |
namespace glm | |
{ | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec() | |
# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE | |
: x(0), y(0), z(0) | |
# endif | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, Q> const& v) | |
: x(v.x), y(v.y), z(v.z) | |
{} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, P> const& v) | |
: x(v.x), y(v.y), z(v.z) | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T scalar) | |
: x(scalar), y(scalar), z(scalar) | |
{} | |
template <typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T _x, T _y, T _z) | |
: x(_x), y(_y), z(_z) | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, U, P> const& v) | |
: x(static_cast<T>(v.x)) | |
, y(static_cast<T>(v.x)) | |
, z(static_cast<T>(v.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, Z _z) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y)) | |
, z(static_cast<T>(_z)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y)) | |
, z(static_cast<T>(_z)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y.x)) | |
, z(static_cast<T>(_z)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y.x)) | |
, z(static_cast<T>(_z)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y)) | |
, z(static_cast<T>(_z.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y)) | |
, z(static_cast<T>(_z.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y.x)) | |
, z(static_cast<T>(_z.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y.x)) | |
, z(static_cast<T>(_z.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, B _z) | |
: x(static_cast<T>(_xy.x)) | |
, y(static_cast<T>(_xy.y)) | |
, z(static_cast<T>(_z)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z) | |
: x(static_cast<T>(_xy.x)) | |
, y(static_cast<T>(_xy.y)) | |
, z(static_cast<T>(_z.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(A _x, vec<2, B, P> const& _yz) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_yz.x)) | |
, z(static_cast<T>(_yz.y)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_yz.x)) | |
, z(static_cast<T>(_yz.y)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, U, P> const& v) | |
: x(static_cast<T>(v.x)) | |
, y(static_cast<T>(v.y)) | |
, z(static_cast<T>(v.z)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<4, U, P> const& v) | |
: x(static_cast<T>(v.x)) | |
, y(static_cast<T>(v.y)) | |
, z(static_cast<T>(v.z)) | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) | |
{ | |
assert(i >= 0 && i < this->length()); | |
switch(i) | |
{ | |
default: | |
case 0: | |
return x; | |
case 1: | |
return y; | |
case 2: | |
return z; | |
} | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) const | |
{ | |
assert(i >= 0 && i < this->length()); | |
switch(i) | |
{ | |
default: | |
case 0: | |
return x; | |
case 1: | |
return y; | |
case 2: | |
return z; | |
} | |
} | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, T, Q> const& v) | |
{ | |
this->x = v.x; | |
this->y = v.y; | |
this->z = v.z; | |
return *this; | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, U, Q> const& v) | |
{ | |
this->x = static_cast<T>(v.x); | |
this->y = static_cast<T>(v.y); | |
this->z = static_cast<T>(v.z); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(U scalar) | |
{ | |
this->x += static_cast<T>(scalar); | |
this->y += static_cast<T>(scalar); | |
this->z += static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<1, U, Q> const& v) | |
{ | |
this->x += static_cast<T>(v.x); | |
this->y += static_cast<T>(v.x); | |
this->z += static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<3, U, Q> const& v) | |
{ | |
this->x += static_cast<T>(v.x); | |
this->y += static_cast<T>(v.y); | |
this->z += static_cast<T>(v.z); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(U scalar) | |
{ | |
this->x -= static_cast<T>(scalar); | |
this->y -= static_cast<T>(scalar); | |
this->z -= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<1, U, Q> const& v) | |
{ | |
this->x -= static_cast<T>(v.x); | |
this->y -= static_cast<T>(v.x); | |
this->z -= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<3, U, Q> const& v) | |
{ | |
this->x -= static_cast<T>(v.x); | |
this->y -= static_cast<T>(v.y); | |
this->z -= static_cast<T>(v.z); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(U scalar) | |
{ | |
this->x *= static_cast<T>(scalar); | |
this->y *= static_cast<T>(scalar); | |
this->z *= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<1, U, Q> const& v) | |
{ | |
this->x *= static_cast<T>(v.x); | |
this->y *= static_cast<T>(v.x); | |
this->z *= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<3, U, Q> const& v) | |
{ | |
this->x *= static_cast<T>(v.x); | |
this->y *= static_cast<T>(v.y); | |
this->z *= static_cast<T>(v.z); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(U v) | |
{ | |
this->x /= static_cast<T>(v); | |
this->y /= static_cast<T>(v); | |
this->z /= static_cast<T>(v); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<1, U, Q> const& v) | |
{ | |
this->x /= static_cast<T>(v.x); | |
this->y /= static_cast<T>(v.x); | |
this->z /= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<3, U, Q> const& v) | |
{ | |
this->x /= static_cast<T>(v.x); | |
this->y /= static_cast<T>(v.y); | |
this->z /= static_cast<T>(v.z); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator++() | |
{ | |
++this->x; | |
++this->y; | |
++this->z; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator--() | |
{ | |
--this->x; | |
--this->y; | |
--this->z; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator++(int) | |
{ | |
vec<3, T, Q> Result(*this); | |
++*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator--(int) | |
{ | |
vec<3, T, Q> Result(*this); | |
--*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(U scalar) | |
{ | |
this->x %= scalar; | |
this->y %= scalar; | |
this->z %= scalar; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<1, U, Q> const& v) | |
{ | |
this->x %= v.x; | |
this->y %= v.x; | |
this->z %= v.x; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<3, U, Q> const& v) | |
{ | |
this->x %= v.x; | |
this->y %= v.y; | |
this->z %= v.z; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(U scalar) | |
{ | |
this->x &= scalar; | |
this->y &= scalar; | |
this->z &= scalar; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<1, U, Q> const& v) | |
{ | |
this->x &= v.x; | |
this->y &= v.x; | |
this->z &= v.x; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<3, U, Q> const& v) | |
{ | |
this->x &= v.x; | |
this->y &= v.y; | |
this->z &= v.z; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(U scalar) | |
{ | |
this->x |= scalar; | |
this->y |= scalar; | |
this->z |= scalar; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<1, U, Q> const& v) | |
{ | |
this->x |= v.x; | |
this->y |= v.x; | |
this->z |= v.x; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<3, U, Q> const& v) | |
{ | |
this->x |= v.x; | |
this->y |= v.y; | |
this->z |= v.z; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(U scalar) | |
{ | |
this->x ^= scalar; | |
this->y ^= scalar; | |
this->z ^= scalar; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<1, U, Q> const& v) | |
{ | |
this->x ^= v.x; | |
this->y ^= v.x; | |
this->z ^= v.x; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<3, U, Q> const& v) | |
{ | |
this->x ^= v.x; | |
this->y ^= v.y; | |
this->z ^= v.z; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(U scalar) | |
{ | |
this->x <<= scalar; | |
this->y <<= scalar; | |
this->z <<= scalar; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<1, U, Q> const& v) | |
{ | |
this->x <<= static_cast<T>(v.x); | |
this->y <<= static_cast<T>(v.x); | |
this->z <<= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<3, U, Q> const& v) | |
{ | |
this->x <<= static_cast<T>(v.x); | |
this->y <<= static_cast<T>(v.y); | |
this->z <<= static_cast<T>(v.z); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(U scalar) | |
{ | |
this->x >>= static_cast<T>(scalar); | |
this->y >>= static_cast<T>(scalar); | |
this->z >>= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<1, U, Q> const& v) | |
{ | |
this->x >>= static_cast<T>(v.x); | |
this->y >>= static_cast<T>(v.x); | |
this->z >>= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<3, U, Q> const& v) | |
{ | |
this->x >>= static_cast<T>(v.x); | |
this->y >>= static_cast<T>(v.y); | |
this->z >>= static_cast<T>(v.z); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v) | |
{ | |
return v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
-v.x, | |
-v.y, | |
-v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x + scalar, | |
v.y + scalar, | |
v.z + scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x + scalar.x, | |
v.y + scalar.x, | |
v.z + scalar.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar + v.x, | |
scalar + v.y, | |
scalar + v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar.x + v.x, | |
scalar.x + v.y, | |
scalar.x + v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) | |
{ | |
return vec<3, T, Q>( | |
v1.x + v2.x, | |
v1.y + v2.y, | |
v1.z + v2.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x - scalar, | |
v.y - scalar, | |
v.z - scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x - scalar.x, | |
v.y - scalar.x, | |
v.z - scalar.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar - v.x, | |
scalar - v.y, | |
scalar - v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar.x - v.x, | |
scalar.x - v.y, | |
scalar.x - v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) | |
{ | |
return vec<3, T, Q>( | |
v1.x - v2.x, | |
v1.y - v2.y, | |
v1.z - v2.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x * scalar, | |
v.y * scalar, | |
v.z * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x * scalar.x, | |
v.y * scalar.x, | |
v.z * scalar.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar * v.x, | |
scalar * v.y, | |
scalar * v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar.x * v.x, | |
scalar.x * v.y, | |
scalar.x * v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) | |
{ | |
return vec<3, T, Q>( | |
v1.x * v2.x, | |
v1.y * v2.y, | |
v1.z * v2.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x / scalar, | |
v.y / scalar, | |
v.z / scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x / scalar.x, | |
v.y / scalar.x, | |
v.z / scalar.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar / v.x, | |
scalar / v.y, | |
scalar / v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar.x / v.x, | |
scalar.x / v.y, | |
scalar.x / v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) | |
{ | |
return vec<3, T, Q>( | |
v1.x / v2.x, | |
v1.y / v2.y, | |
v1.z / v2.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x % scalar, | |
v.y % scalar, | |
v.z % scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x % scalar.x, | |
v.y % scalar.x, | |
v.z % scalar.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar % v.x, | |
scalar % v.y, | |
scalar % v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar.x % v.x, | |
scalar.x % v.y, | |
scalar.x % v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) | |
{ | |
return vec<3, T, Q>( | |
v1.x % v2.x, | |
v1.y % v2.y, | |
v1.z % v2.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, T scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x & scalar, | |
v.y & scalar, | |
v.z & scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x & scalar.x, | |
v.y & scalar.x, | |
v.z & scalar.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar & v.x, | |
scalar & v.y, | |
scalar & v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar.x & v.x, | |
scalar.x & v.y, | |
scalar.x & v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) | |
{ | |
return vec<3, T, Q>( | |
v1.x & v2.x, | |
v1.y & v2.y, | |
v1.z & v2.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x | scalar, | |
v.y | scalar, | |
v.z | scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x | scalar.x, | |
v.y | scalar.x, | |
v.z | scalar.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar | v.x, | |
scalar | v.y, | |
scalar | v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar.x | v.x, | |
scalar.x | v.y, | |
scalar.x | v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) | |
{ | |
return vec<3, T, Q>( | |
v1.x | v2.x, | |
v1.y | v2.y, | |
v1.z | v2.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x ^ scalar, | |
v.y ^ scalar, | |
v.z ^ scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x ^ scalar.x, | |
v.y ^ scalar.x, | |
v.z ^ scalar.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar ^ v.x, | |
scalar ^ v.y, | |
scalar ^ v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar.x ^ v.x, | |
scalar.x ^ v.y, | |
scalar.x ^ v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) | |
{ | |
return vec<3, T, Q>( | |
v1.x ^ v2.x, | |
v1.y ^ v2.y, | |
v1.z ^ v2.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x << scalar, | |
v.y << scalar, | |
v.z << scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x << scalar.x, | |
v.y << scalar.x, | |
v.z << scalar.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar << v.x, | |
scalar << v.y, | |
scalar << v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar.x << v.x, | |
scalar.x << v.y, | |
scalar.x << v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) | |
{ | |
return vec<3, T, Q>( | |
v1.x << v2.x, | |
v1.y << v2.y, | |
v1.z << v2.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x >> scalar, | |
v.y >> scalar, | |
v.z >> scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) | |
{ | |
return vec<3, T, Q>( | |
v.x >> scalar.x, | |
v.y >> scalar.x, | |
v.z >> scalar.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar >> v.x, | |
scalar >> v.y, | |
scalar >> v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
scalar.x >> v.x, | |
scalar.x >> v.y, | |
scalar.x >> v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) | |
{ | |
return vec<3, T, Q>( | |
v1.x >> v2.x, | |
v1.y >> v2.y, | |
v1.z >> v2.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v) | |
{ | |
return vec<3, T, Q>( | |
~v.x, | |
~v.y, | |
~v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) | |
{ | |
return | |
detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x) && | |
detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.y, v2.y) && | |
detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.z, v2.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) | |
{ | |
return !(v1 == v2); | |
} | |
template<qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2) | |
{ | |
return vec<3, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z); | |
} | |
template<qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2) | |
{ | |
return vec<3, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z); | |
} | |
} | |
#endif | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
struct mat<3, 2, T, Q> | |
{ | |
typedef vec<2, T, Q> col_type; | |
typedef vec<3, T, Q> row_type; | |
typedef mat<3, 2, T, Q> type; | |
typedef mat<2, 3, T, Q> transpose_type; | |
typedef T value_type; | |
private: | |
col_type value[3]; | |
public: | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } | |
GLM_FUNC_DECL col_type & operator[](length_type i); | |
GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 2, T, P> const& m); | |
GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
T x0, T y0, | |
T x1, T y1, | |
T x2, T y2); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
col_type const& v0, | |
col_type const& v1, | |
col_type const& v2); | |
template< | |
typename X1, typename Y1, | |
typename X2, typename Y2, | |
typename X3, typename Y3> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
X1 x1, Y1 y1, | |
X2 x2, Y2 y2, | |
X3 x3, Y3 y3); | |
template<typename V1, typename V2, typename V3> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
vec<2, V1, Q> const& v1, | |
vec<2, V2, Q> const& v2, | |
vec<2, V3, Q> const& v3); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, U, P> const& m); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 2, T, Q> & operator=(mat<3, 2, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(mat<3, 2, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(mat<3, 2, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 2, T, Q> & operator*=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 2, T, Q> & operator/=(U s); | |
GLM_FUNC_DECL mat<3, 2, T, Q> & operator++ (); | |
GLM_FUNC_DECL mat<3, 2, T, Q> & operator-- (); | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator++(int); | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator--(int); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); | |
} | |
#ifndef GLM_EXTERNAL_TEMPLATE | |
namespace glm | |
{ | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat() | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST | |
: value{col_type(1, 0), col_type(0, 1), col_type(0, 0)} | |
# endif | |
{ | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION | |
this->value[0] = col_type(1, 0); | |
this->value[1] = col_type(0, 1); | |
this->value[2] = col_type(0, 0); | |
# endif | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, T, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
this->value[2] = m[2]; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(T s) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(s, 0), col_type(0, s), col_type(0, 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(s, 0); | |
this->value[1] = col_type(0, s); | |
this->value[2] = col_type(0, 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat | |
( | |
T x0, T y0, | |
T x1, T y1, | |
T x2, T y2 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(x0, y0); | |
this->value[1] = col_type(x1, y1); | |
this->value[2] = col_type(x2, y2); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v0), col_type(v1), col_type(v2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = v0; | |
this->value[1] = v1; | |
this->value[2] = v2; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template< | |
typename X0, typename Y0, | |
typename X1, typename Y1, | |
typename X2, typename Y2> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat | |
( | |
X0 x0, Y0 y0, | |
X1 x1, Y1 y1, | |
X2 x2, Y2 y2 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(x0, y0); | |
this->value[1] = col_type(x1, y1); | |
this->value[2] = col_type(x2, y2); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename V0, typename V1, typename V2> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v0), col_type(v1), col_type(v2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(v0); | |
this->value[1] = col_type(v1); | |
this->value[2] = col_type(v2); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, U, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(m[2]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
this->value[2] = col_type(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(m[2]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(m[2]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(m[2]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
this->value[2] = m[2]; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(m[2]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type & mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 2, T, Q>::col_type const& mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) const | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator=(mat<3, 2, U, Q> const& m) | |
{ | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
this->value[2] = m[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(U s) | |
{ | |
this->value[0] += s; | |
this->value[1] += s; | |
this->value[2] += s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(mat<3, 2, U, Q> const& m) | |
{ | |
this->value[0] += m[0]; | |
this->value[1] += m[1]; | |
this->value[2] += m[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(U s) | |
{ | |
this->value[0] -= s; | |
this->value[1] -= s; | |
this->value[2] -= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(mat<3, 2, U, Q> const& m) | |
{ | |
this->value[0] -= m[0]; | |
this->value[1] -= m[1]; | |
this->value[2] -= m[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator*=(U s) | |
{ | |
this->value[0] *= s; | |
this->value[1] *= s; | |
this->value[2] *= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> & mat<3, 2, T, Q>::operator/=(U s) | |
{ | |
this->value[0] /= s; | |
this->value[1] /= s; | |
this->value[2] /= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator++() | |
{ | |
++this->value[0]; | |
++this->value[1]; | |
++this->value[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator--() | |
{ | |
--this->value[0]; | |
--this->value[1]; | |
--this->value[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator++(int) | |
{ | |
mat<3, 2, T, Q> Result(*this); | |
++*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator--(int) | |
{ | |
mat<3, 2, T, Q> Result(*this); | |
--*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m) | |
{ | |
return m; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m) | |
{ | |
return mat<3, 2, T, Q>( | |
-m[0], | |
-m[1], | |
-m[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar) | |
{ | |
return mat<3, 2, T, Q>( | |
m[0] + scalar, | |
m[1] + scalar, | |
m[2] + scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) | |
{ | |
return mat<3, 2, T, Q>( | |
m1[0] + m2[0], | |
m1[1] + m2[1], | |
m1[2] + m2[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar) | |
{ | |
return mat<3, 2, T, Q>( | |
m[0] - scalar, | |
m[1] - scalar, | |
m[2] - scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) | |
{ | |
return mat<3, 2, T, Q>( | |
m1[0] - m2[0], | |
m1[1] - m2[1], | |
m1[2] - m2[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar) | |
{ | |
return mat<3, 2, T, Q>( | |
m[0] * scalar, | |
m[1] * scalar, | |
m[2] * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m) | |
{ | |
return mat<3, 2, T, Q>( | |
m[0] * scalar, | |
m[1] * scalar, | |
m[2] * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v) | |
{ | |
return typename mat<3, 2, T, Q>::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, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m) | |
{ | |
return typename mat<3, 2, T, Q>::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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> 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]; | |
mat<2, 2, T, Q> Result; | |
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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2) | |
{ | |
return mat<3, 2, T, Q>( | |
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], | |
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], | |
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], | |
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], | |
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], | |
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2) | |
{ | |
return mat<4, 2, T, Q>( | |
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], | |
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], | |
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], | |
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], | |
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], | |
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], | |
m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2], | |
m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar) | |
{ | |
return mat<3, 2, T, Q>( | |
m[0] / scalar, | |
m[1] / scalar, | |
m[2] / scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m) | |
{ | |
return mat<3, 2, T, Q>( | |
scalar / m[0], | |
scalar / m[1], | |
scalar / m[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) | |
{ | |
return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) | |
{ | |
return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); | |
} | |
} | |
#endif | |
namespace glm | |
{ | |
typedef mat<3, 2, double, defaultp> dmat3x2; | |
} | |
namespace glm | |
{ | |
typedef mat<3, 2, double, lowp> lowp_dmat3x2; | |
typedef mat<3, 2, double, mediump> mediump_dmat3x2; | |
typedef mat<3, 2, double, highp> highp_dmat3x2; | |
} | |
namespace glm | |
{ | |
typedef mat<3, 2, float, defaultp> mat3x2; | |
} | |
namespace glm | |
{ | |
typedef mat<3, 2, float, lowp> lowp_mat3x2; | |
typedef mat<3, 2, float, mediump> mediump_mat3x2; | |
typedef mat<3, 2, float, highp> highp_mat3x2; | |
} | |
# 5395 "glm-amalgamated/glm.h" | |
#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR | |
# include "_swizzle.hpp" | |
#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION | |
# include "_swizzle_func.hpp" | |
#endif | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
struct vec<1, T, Q> | |
{ | |
typedef T value_type; | |
typedef vec<1, T, Q> type; | |
typedef vec<1, bool, Q> bool_type; | |
# if GLM_SILENT_WARNINGS == GLM_ENABLE | |
# if GLM_COMPILER & GLM_COMPILER_GCC | |
#pragma GCC diagnostic push | |
#pragma GCC diagnostic ignored "-Wpedantic" | |
# elif GLM_COMPILER & GLM_COMPILER_CLANG | |
#pragma clang diagnostic push | |
#pragma clang diagnostic ignored "-Wgnu-anonymous-struct" | |
#pragma clang diagnostic ignored "-Wnested-anon-types" | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
#pragma warning(push) | |
#pragma warning(disable: 4201) | |
# endif | |
# endif | |
# if GLM_CONFIG_XYZW_ONLY | |
T x; | |
# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE | |
union | |
{ | |
T x; | |
T r; | |
T s; | |
typename detail::storage<1, T, detail::is_aligned<Q>::value>::type data; | |
# 5451 "glm-amalgamated/glm.h" | |
}; | |
# else | |
union {T x, r, s;}; | |
# endif | |
# if GLM_SILENT_WARNINGS == GLM_ENABLE | |
# if GLM_COMPILER & GLM_COMPILER_CLANG | |
#pragma clang diagnostic pop | |
# elif GLM_COMPILER & GLM_COMPILER_GCC | |
#pragma GCC diagnostic pop | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
#pragma warning(pop) | |
# endif | |
# endif | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 1;} | |
GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); | |
GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, T, P> const& v); | |
GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<1, U, P> const& v); | |
# 5519 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec const& v) GLM_DEFAULT; | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(vec<1, U, Q> const& v); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator++(); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator--(); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator++(int); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator--(int); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(vec<1, U, Q> const& v); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); | |
template<qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); | |
} | |
#ifndef GLM_EXTERNAL_TEMPLATE | |
namespace glm | |
{ | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec() | |
# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE | |
: x(0) | |
# endif | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, Q> const& v) | |
: x(v.x) | |
{} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, P> const& v) | |
: x(v.x) | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(T scalar) | |
: x(scalar) | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, U, P> const& v) | |
: x(static_cast<T>(v.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<2, U, P> const& v) | |
: x(static_cast<T>(v.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<3, U, P> const& v) | |
: x(static_cast<T>(v.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<4, U, P> const& v) | |
: x(static_cast<T>(v.x)) | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) | |
{ | |
return x; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) const | |
{ | |
return x; | |
} | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, T, Q> const& v) | |
{ | |
this->x = v.x; | |
return *this; | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, U, Q> const& v) | |
{ | |
this->x = static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(U scalar) | |
{ | |
this->x += static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(vec<1, U, Q> const& v) | |
{ | |
this->x += static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(U scalar) | |
{ | |
this->x -= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(vec<1, U, Q> const& v) | |
{ | |
this->x -= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(U scalar) | |
{ | |
this->x *= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(vec<1, U, Q> const& v) | |
{ | |
this->x *= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(U scalar) | |
{ | |
this->x /= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(vec<1, U, Q> const& v) | |
{ | |
this->x /= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator++() | |
{ | |
++this->x; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator--() | |
{ | |
--this->x; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator++(int) | |
{ | |
vec<1, T, Q> Result(*this); | |
++*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator--(int) | |
{ | |
vec<1, T, Q> Result(*this); | |
--*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(U scalar) | |
{ | |
this->x %= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(vec<1, U, Q> const& v) | |
{ | |
this->x %= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(U scalar) | |
{ | |
this->x &= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(vec<1, U, Q> const& v) | |
{ | |
this->x &= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(U scalar) | |
{ | |
this->x |= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(vec<1, U, Q> const& v) | |
{ | |
this->x |= U(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(U scalar) | |
{ | |
this->x ^= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(vec<1, U, Q> const& v) | |
{ | |
this->x ^= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(U scalar) | |
{ | |
this->x <<= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(vec<1, U, Q> const& v) | |
{ | |
this->x <<= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(U scalar) | |
{ | |
this->x >>= static_cast<T>(scalar); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(vec<1, U, Q> const& v) | |
{ | |
this->x >>= static_cast<T>(v.x); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v) | |
{ | |
return v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v) | |
{ | |
return vec<1, T, Q>( | |
-v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar) | |
{ | |
return vec<1, T, Q>( | |
v.x + scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v) | |
{ | |
return vec<1, T, Q>( | |
scalar + v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<1, T, Q>( | |
v1.x + v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar) | |
{ | |
return vec<1, T, Q>( | |
v.x - scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v) | |
{ | |
return vec<1, T, Q>( | |
scalar - v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<1, T, Q>( | |
v1.x - v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar) | |
{ | |
return vec<1, T, Q>( | |
v.x * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v) | |
{ | |
return vec<1, T, Q>( | |
scalar * v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<1, T, Q>( | |
v1.x * v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar) | |
{ | |
return vec<1, T, Q>( | |
v.x / scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v) | |
{ | |
return vec<1, T, Q>( | |
scalar / v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<1, T, Q>( | |
v1.x / v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar) | |
{ | |
return vec<1, T, Q>( | |
v.x % scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v) | |
{ | |
return vec<1, T, Q>( | |
scalar % v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<1, T, Q>( | |
v1.x % v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar) | |
{ | |
return vec<1, T, Q>( | |
v.x & scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v) | |
{ | |
return vec<1, T, Q>( | |
scalar & v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<1, T, Q>( | |
v1.x & v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar) | |
{ | |
return vec<1, T, Q>( | |
v.x | scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v) | |
{ | |
return vec<1, T, Q>( | |
scalar | v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<1, T, Q>( | |
v1.x | v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar) | |
{ | |
return vec<1, T, Q>( | |
v.x ^ scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v) | |
{ | |
return vec<1, T, Q>( | |
scalar ^ v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<1, T, Q>( | |
v1.x ^ v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar) | |
{ | |
return vec<1, T, Q>( | |
static_cast<T>(v.x << scalar)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v) | |
{ | |
return vec<1, T, Q>( | |
static_cast<T>(scalar << v.x)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<1, T, Q>( | |
static_cast<T>(v1.x << v2.x)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar) | |
{ | |
return vec<1, T, Q>( | |
static_cast<T>(v.x >> scalar)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v) | |
{ | |
return vec<1, T, Q>( | |
static_cast<T>(scalar >> v.x)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<1, T, Q>( | |
static_cast<T>(v1.x >> v2.x)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v) | |
{ | |
return vec<1, T, Q>( | |
~v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return !(v1 == v2); | |
} | |
template<qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) | |
{ | |
return vec<1, bool, Q>(v1.x && v2.x); | |
} | |
template<qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) | |
{ | |
return vec<1, bool, Q>(v1.x || v2.x); | |
} | |
} | |
#endif | |
#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR | |
# include "_swizzle.hpp" | |
#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION | |
# include "_swizzle_func.hpp" | |
#endif | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
struct vec<4, T, Q> | |
{ | |
typedef T value_type; | |
typedef vec<4, T, Q> type; | |
typedef vec<4, bool, Q> bool_type; | |
# if GLM_SILENT_WARNINGS == GLM_ENABLE | |
# if GLM_COMPILER & GLM_COMPILER_GCC | |
#pragma GCC diagnostic push | |
#pragma GCC diagnostic ignored "-Wpedantic" | |
# elif GLM_COMPILER & GLM_COMPILER_CLANG | |
#pragma clang diagnostic push | |
#pragma clang diagnostic ignored "-Wgnu-anonymous-struct" | |
#pragma clang diagnostic ignored "-Wnested-anon-types" | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
#pragma warning(push) | |
#pragma warning(disable: 4201) | |
# endif | |
# endif | |
# if GLM_CONFIG_XYZW_ONLY | |
T x, y, z, w; | |
# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE | |
union | |
{ | |
struct { T x, y, z, w; }; | |
struct { T r, g, b, a; }; | |
struct { T s, t, p, q; }; | |
typename detail::storage<4, T, detail::is_aligned<Q>::value>::type data; | |
# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR | |
GLM_SWIZZLE4_2_MEMBERS(T, Q, x, y, z, w) | |
GLM_SWIZZLE4_2_MEMBERS(T, Q, r, g, b, a) | |
GLM_SWIZZLE4_2_MEMBERS(T, Q, s, t, p, q) | |
GLM_SWIZZLE4_3_MEMBERS(T, Q, x, y, z, w) | |
GLM_SWIZZLE4_3_MEMBERS(T, Q, r, g, b, a) | |
GLM_SWIZZLE4_3_MEMBERS(T, Q, s, t, p, q) | |
GLM_SWIZZLE4_4_MEMBERS(T, Q, x, y, z, w) | |
GLM_SWIZZLE4_4_MEMBERS(T, Q, r, g, b, a) | |
GLM_SWIZZLE4_4_MEMBERS(T, Q, s, t, p, q) | |
# endif | |
}; | |
# else | |
union { T x, r, s; }; | |
union { T y, g, t; }; | |
union { T z, b, p; }; | |
union { T w, a, q; }; | |
# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION | |
GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, Q) | |
# endif | |
# endif | |
# if GLM_SILENT_WARNINGS == GLM_ENABLE | |
# if GLM_COMPILER & GLM_COMPILER_CLANG | |
#pragma clang diagnostic pop | |
# elif GLM_COMPILER & GLM_COMPILER_GCC | |
#pragma GCC diagnostic pop | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
#pragma warning(pop) | |
# endif | |
# endif | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} | |
GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); | |
GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, Q> const& v) GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, P> const& v); | |
GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y, T z, T w); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, Z _z, W _w); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _Y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, C _w); | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w); | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w); | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w); | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, C _w); | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w); | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w); | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w); | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, B _y, vec<2, C, P> const& _zw); | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw); | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw); | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw); | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, B _w); | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w); | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<3, B, P> const& _yzw); | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw); | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); | |
# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR | |
template<int E0, int E1, int E2, int E3> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<4, T, Q, E0, E1, E2, E3> const& that) | |
{ | |
*this = that(); | |
} | |
template<int E0, int E1, int F0, int F1> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, detail::_swizzle<2, T, Q, F0, F1, -1, -2> const& u) | |
{ | |
*this = vec<4, T, Q>(v(), u()); | |
} | |
template<int E0, int E1> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, T const& y, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v) | |
{ | |
*this = vec<4, T, Q>(x, y, v()); | |
} | |
template<int E0, int E1> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& w) | |
{ | |
*this = vec<4, T, Q>(x, v(), w); | |
} | |
template<int E0, int E1> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& z, T const& w) | |
{ | |
*this = vec<4, T, Q>(v(), z, w); | |
} | |
template<int E0, int E1, int E2> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v, T const& w) | |
{ | |
*this = vec<4, T, Q>(v(), w); | |
} | |
template<int E0, int E1, int E2> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v) | |
{ | |
*this = vec<4, T, Q>(x, v()); | |
} | |
# endif | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, T, Q> const& v) GLM_DEFAULT; | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<4, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<4, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<4, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<4, U, Q> const& v); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator++(); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator--(); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator++(int); | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator--(int); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<4, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<4, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<4, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<4, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<4, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(U scalar); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<1, U, Q> const& v); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<4, U, Q> const& v); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); | |
template<qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2); | |
template<qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2); | |
} | |
#ifndef GLM_EXTERNAL_TEMPLATE | |
namespace glm{ | |
namespace detail | |
{ | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_vec4_add | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) | |
{ | |
return vec<4, T, Q>(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w); | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_vec4_sub | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) | |
{ | |
return vec<4, T, Q>(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w); | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_vec4_mul | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) | |
{ | |
return vec<4, T, Q>(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w); | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_vec4_div | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) | |
{ | |
return vec<4, T, Q>(a.x / b.x, a.y / b.y, a.z / b.z, a.w / b.w); | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_vec4_mod | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) | |
{ | |
return vec<4, T, Q>(a.x % b.x, a.y % b.y, a.z % b.z, a.w % b.w); | |
} | |
}; | |
template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> | |
struct compute_vec4_and | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) | |
{ | |
return vec<4, T, Q>(a.x & b.x, a.y & b.y, a.z & b.z, a.w & b.w); | |
} | |
}; | |
template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> | |
struct compute_vec4_or | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) | |
{ | |
return vec<4, T, Q>(a.x | b.x, a.y | b.y, a.z | b.z, a.w | b.w); | |
} | |
}; | |
template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> | |
struct compute_vec4_xor | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) | |
{ | |
return vec<4, T, Q>(a.x ^ b.x, a.y ^ b.y, a.z ^ b.z, a.w ^ b.w); | |
} | |
}; | |
template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> | |
struct compute_vec4_shift_left | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) | |
{ | |
return vec<4, T, Q>(a.x << b.x, a.y << b.y, a.z << b.z, a.w << b.w); | |
} | |
}; | |
template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> | |
struct compute_vec4_shift_right | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) | |
{ | |
return vec<4, T, Q>(a.x >> b.x, a.y >> b.y, a.z >> b.z, a.w >> b.w); | |
} | |
}; | |
template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> | |
struct compute_vec4_equal | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return | |
detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x) && | |
detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.y, v2.y) && | |
detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.z, v2.z) && | |
detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.w, v2.w); | |
} | |
}; | |
template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> | |
struct compute_vec4_nequal | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return !compute_vec4_equal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v1, v2); | |
} | |
}; | |
template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> | |
struct compute_vec4_bitwise_not | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(~v.x, ~v.y, ~v.z, ~v.w); | |
} | |
}; | |
} | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec() | |
# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE | |
: x(0), y(0), z(0), w(0) | |
# endif | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, Q> const& v) | |
: x(v.x), y(v.y), z(v.z), w(v.w) | |
{} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, P> const& v) | |
: x(v.x), y(v.y), z(v.z), w(v.w) | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T scalar) | |
: x(scalar), y(scalar), z(scalar), w(scalar) | |
{} | |
template <typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T _x, T _y, T _z, T _w) | |
: x(_x), y(_y), z(_z), w(_w) | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, U, P> const& v) | |
: x(static_cast<T>(v.x)) | |
, y(static_cast<T>(v.x)) | |
, z(static_cast<T>(v.x)) | |
, w(static_cast<T>(v.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, Z _z, W _w) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y)) | |
, z(static_cast<T>(_z)) | |
, w(static_cast<T>(_w)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y)) | |
, z(static_cast<T>(_z)) | |
, w(static_cast<T>(_w)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y.x)) | |
, z(static_cast<T>(_z)) | |
, w(static_cast<T>(_w)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y.x)) | |
, z(static_cast<T>(_z)) | |
, w(static_cast<T>(_w)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y)) | |
, z(static_cast<T>(_z.x)) | |
, w(static_cast<T>(_w)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y)) | |
, z(static_cast<T>(_z.x)) | |
, w(static_cast<T>(_w)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y.x)) | |
, z(static_cast<T>(_z.x)) | |
, w(static_cast<T>(_w)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y.x)) | |
, z(static_cast<T>(_z.x)) | |
, w(static_cast<T>(_w)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y)) | |
, z(static_cast<T>(_z)) | |
, w(static_cast<T>(_w.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y.x)) | |
, z(static_cast<T>(_z)) | |
, w(static_cast<T>(_w.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y.x)) | |
, z(static_cast<T>(_z)) | |
, w(static_cast<T>(_w.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y)) | |
, z(static_cast<T>(_z.x)) | |
, w(static_cast<T>(_w.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y)) | |
, z(static_cast<T>(_z.x)) | |
, w(static_cast<T>(_w.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y.x)) | |
, z(static_cast<T>(_z.x)) | |
, w(static_cast<T>(_w.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename X, typename Y, typename Z, typename W> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y.x)) | |
, z(static_cast<T>(_z.x)) | |
, w(static_cast<T>(_w.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, C _w) | |
: x(static_cast<T>(_xy.x)) | |
, y(static_cast<T>(_xy.y)) | |
, z(static_cast<T>(_z)) | |
, w(static_cast<T>(_w)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w) | |
: x(static_cast<T>(_xy.x)) | |
, y(static_cast<T>(_xy.y)) | |
, z(static_cast<T>(_z.x)) | |
, w(static_cast<T>(_w)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w) | |
: x(static_cast<T>(_xy.x)) | |
, y(static_cast<T>(_xy.y)) | |
, z(static_cast<T>(_z)) | |
, w(static_cast<T>(_w.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w) | |
: x(static_cast<T>(_xy.x)) | |
, y(static_cast<T>(_xy.y)) | |
, z(static_cast<T>(_z.x)) | |
, w(static_cast<T>(_w.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, C _w) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_yz.x)) | |
, z(static_cast<T>(_yz.y)) | |
, w(static_cast<T>(_w)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_yz.x)) | |
, z(static_cast<T>(_yz.y)) | |
, w(static_cast<T>(_w)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_yz.x)) | |
, z(static_cast<T>(_yz.y)) | |
, w(static_cast<T>(_w.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_yz.x)) | |
, z(static_cast<T>(_yz.y)) | |
, w(static_cast<T>(_w.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, B _y, vec<2, C, P> const& _zw) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y)) | |
, z(static_cast<T>(_zw.x)) | |
, w(static_cast<T>(_zw.y)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y)) | |
, z(static_cast<T>(_zw.x)) | |
, w(static_cast<T>(_zw.y)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_y.x)) | |
, z(static_cast<T>(_zw.x)) | |
, w(static_cast<T>(_zw.y)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, typename C, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_y.x)) | |
, z(static_cast<T>(_zw.x)) | |
, w(static_cast<T>(_zw.y)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, B _w) | |
: x(static_cast<T>(_xyz.x)) | |
, y(static_cast<T>(_xyz.y)) | |
, z(static_cast<T>(_xyz.z)) | |
, w(static_cast<T>(_w)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w) | |
: x(static_cast<T>(_xyz.x)) | |
, y(static_cast<T>(_xyz.y)) | |
, z(static_cast<T>(_xyz.z)) | |
, w(static_cast<T>(_w.x)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<3, B, P> const& _yzw) | |
: x(static_cast<T>(_x)) | |
, y(static_cast<T>(_yzw.x)) | |
, z(static_cast<T>(_yzw.y)) | |
, w(static_cast<T>(_yzw.z)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw) | |
: x(static_cast<T>(_x.x)) | |
, y(static_cast<T>(_yzw.x)) | |
, z(static_cast<T>(_yzw.y)) | |
, w(static_cast<T>(_yzw.z)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename A, typename B, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw) | |
: x(static_cast<T>(_xy.x)) | |
, y(static_cast<T>(_xy.y)) | |
, z(static_cast<T>(_zw.x)) | |
, w(static_cast<T>(_zw.y)) | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, U, P> const& v) | |
: x(static_cast<T>(v.x)) | |
, y(static_cast<T>(v.y)) | |
, z(static_cast<T>(v.z)) | |
, w(static_cast<T>(v.w)) | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR T& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) | |
{ | |
assert(i >= 0 && i < this->length()); | |
switch(i) | |
{ | |
default: | |
case 0: | |
return x; | |
case 1: | |
return y; | |
case 2: | |
return z; | |
case 3: | |
return w; | |
} | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) const | |
{ | |
assert(i >= 0 && i < this->length()); | |
switch(i) | |
{ | |
default: | |
case 0: | |
return x; | |
case 1: | |
return y; | |
case 2: | |
return z; | |
case 3: | |
return w; | |
} | |
} | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, T, Q> const& v) | |
{ | |
this->x = v.x; | |
this->y = v.y; | |
this->z = v.z; | |
this->w = v.w; | |
return *this; | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, U, Q> const& v) | |
{ | |
this->x = static_cast<T>(v.x); | |
this->y = static_cast<T>(v.y); | |
this->z = static_cast<T>(v.z); | |
this->w = static_cast<T>(v.w); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(U scalar) | |
{ | |
return (*this = detail::compute_vec4_add<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<1, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_add<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<4, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_add<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(U scalar) | |
{ | |
return (*this = detail::compute_vec4_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<1, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<4, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(U scalar) | |
{ | |
return (*this = detail::compute_vec4_mul<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<1, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_mul<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<4, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_mul<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(U scalar) | |
{ | |
return (*this = detail::compute_vec4_div<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<1, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_div<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<4, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_div<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator++() | |
{ | |
++this->x; | |
++this->y; | |
++this->z; | |
++this->w; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator--() | |
{ | |
--this->x; | |
--this->y; | |
--this->z; | |
--this->w; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator++(int) | |
{ | |
vec<4, T, Q> Result(*this); | |
++*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator--(int) | |
{ | |
vec<4, T, Q> Result(*this); | |
--*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(U scalar) | |
{ | |
return (*this = detail::compute_vec4_mod<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<1, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_mod<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<4, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_mod<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(U scalar) | |
{ | |
return (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<1, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<4, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(U scalar) | |
{ | |
return (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<1, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<4, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(U scalar) | |
{ | |
return (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<1, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<4, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(U scalar) | |
{ | |
return (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<1, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<4, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(U scalar) | |
{ | |
return (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<1, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<4, U, Q> const& v) | |
{ | |
return (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v) | |
{ | |
return v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(0) -= v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar) | |
{ | |
return vec<4, T, Q>(v) += scalar; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) += v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(v) += scalar; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v2) += v1; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) += v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar) | |
{ | |
return vec<4, T, Q>(v) -= scalar; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) -= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(scalar) -= v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1.x) -= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) -= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar) | |
{ | |
return vec<4, T, Q>(v) *= scalar; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) *= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(v) *= scalar; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v2) *= v1; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) *= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar) | |
{ | |
return vec<4, T, Q>(v) /= scalar; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) /= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(scalar) /= v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1.x) /= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) /= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar) | |
{ | |
return vec<4, T, Q>(v) %= scalar; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) %= v2.x; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(scalar) %= v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(scalar.x) %= v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) %= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar) | |
{ | |
return vec<4, T, Q>(v) &= scalar; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar) | |
{ | |
return vec<4, T, Q>(v) &= scalar; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(scalar) &= v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1.x) &= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) &= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar) | |
{ | |
return vec<4, T, Q>(v) |= scalar; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) |= v2.x; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(scalar) |= v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1.x) |= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) |= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar) | |
{ | |
return vec<4, T, Q>(v) ^= scalar; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) ^= v2.x; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(scalar) ^= v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1.x) ^= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) ^= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar) | |
{ | |
return vec<4, T, Q>(v) <<= scalar; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) <<= v2.x; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(scalar) <<= v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1.x) <<= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) <<= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar) | |
{ | |
return vec<4, T, Q>(v) >>= scalar; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) >>= v2.x; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(scalar) >>= v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1.x) >>= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return vec<4, T, Q>(v1) >>= v2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v) | |
{ | |
return detail::compute_vec4_bitwise_not<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return detail::compute_vec4_equal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v1, v2); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) | |
{ | |
return detail::compute_vec4_nequal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v1, v2); | |
} | |
template<qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2) | |
{ | |
return vec<4, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z, v1.w && v2.w); | |
} | |
template<qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2) | |
{ | |
return vec<4, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z, v1.w || v2.w); | |
} | |
} | |
#if GLM_CONFIG_SIMD == GLM_ENABLE | |
# include "type_vec4_simd.inl" | |
#endif | |
#endif | |
#include <cmath> | |
namespace glm | |
{ | |
# 7899 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> pow(vec<L, T, Q> const& base, vec<L, T, Q> const& exponent); | |
# 7910 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> exp(vec<L, T, Q> const& v); | |
# 7923 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> log(vec<L, T, Q> const& v); | |
# 7934 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> exp2(vec<L, T, Q> const& v); | |
# 7946 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> log2(vec<L, T, Q> const& v); | |
# 7957 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> sqrt(vec<L, T, Q> const& v); | |
# 7968 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> inversesqrt(vec<L, T, Q> const& v); | |
} | |
# 7997 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
# 8009 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> lessThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y); | |
# 8019 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> lessThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y); | |
# 8029 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> greaterThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y); | |
# 8039 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> greaterThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y); | |
# 8049 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y); | |
# 8059 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y); | |
template<length_t L, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR bool any(vec<L, bool, Q> const& v); | |
template<length_t L, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR bool all(vec<L, bool, Q> const& v); | |
# 8087 "glm-amalgamated/glm.h" | |
template<length_t L, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> not_(vec<L, bool, Q> const& v); | |
} | |
namespace glm | |
{ | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> lessThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y) | |
{ | |
vec<L, bool, Q> Result(true); | |
for(length_t i = 0; i < L; ++i) | |
Result[i] = x[i] < y[i]; | |
return Result; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> lessThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y) | |
{ | |
vec<L, bool, Q> Result(true); | |
for(length_t i = 0; i < L; ++i) | |
Result[i] = x[i] <= y[i]; | |
return Result; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> greaterThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y) | |
{ | |
vec<L, bool, Q> Result(true); | |
for(length_t i = 0; i < L; ++i) | |
Result[i] = x[i] > y[i]; | |
return Result; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> greaterThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y) | |
{ | |
vec<L, bool, Q> Result(true); | |
for(length_t i = 0; i < L; ++i) | |
Result[i] = x[i] >= y[i]; | |
return Result; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y) | |
{ | |
vec<L, bool, Q> Result(true); | |
for(length_t i = 0; i < L; ++i) | |
Result[i] = x[i] == y[i]; | |
return Result; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y) | |
{ | |
vec<L, bool, Q> Result(true); | |
for(length_t i = 0; i < L; ++i) | |
Result[i] = x[i] != y[i]; | |
return Result; | |
} | |
template<length_t L, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool any(vec<L, bool, Q> const& v) | |
{ | |
bool Result = false; | |
for(length_t i = 0; i < L; ++i) | |
Result = Result || v[i]; | |
return Result; | |
} | |
template<length_t L, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool all(vec<L, bool, Q> const& v) | |
{ | |
bool Result = true; | |
for(length_t i = 0; i < L; ++i) | |
Result = Result && v[i]; | |
return Result; | |
} | |
template<length_t L, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> not_(vec<L, bool, Q> const& v) | |
{ | |
vec<L, bool, Q> Result(true); | |
for(length_t i = 0; i < L; ++i) | |
Result[i] = !v[i]; | |
return Result; | |
} | |
} | |
#if GLM_CONFIG_SIMD == GLM_ENABLE | |
# include "func_vector_relational_simd.inl" | |
#endif | |
namespace glm{ | |
namespace detail | |
{ | |
template<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename R, typename T, qualifier Q> | |
struct functor1{}; | |
template<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q> | |
struct functor1<vec, 1, R, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q> const& v) | |
{ | |
return vec<1, R, Q>(Func(v.x)); | |
} | |
}; | |
template<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q> | |
struct functor1<vec, 2, R, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q> const& v) | |
{ | |
return vec<2, R, Q>(Func(v.x), Func(v.y)); | |
} | |
}; | |
template<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q> | |
struct functor1<vec, 3, R, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q> const& v) | |
{ | |
return vec<3, R, Q>(Func(v.x), Func(v.y), Func(v.z)); | |
} | |
}; | |
template<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q> | |
struct functor1<vec, 4, R, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q> const& v) | |
{ | |
return vec<4, R, Q>(Func(v.x), Func(v.y), Func(v.z), Func(v.w)); | |
} | |
}; | |
template<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename T, qualifier Q> | |
struct functor2{}; | |
template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q> | |
struct functor2<vec, 1, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, vec<1, T, Q> const& b) | |
{ | |
return vec<1, T, Q>(Func(a.x, b.x)); | |
} | |
}; | |
template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q> | |
struct functor2<vec, 2, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, vec<2, T, Q> const& b) | |
{ | |
return vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y)); | |
} | |
}; | |
template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q> | |
struct functor2<vec, 3, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, vec<3, T, Q> const& b) | |
{ | |
return vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z)); | |
} | |
}; | |
template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q> | |
struct functor2<vec, 4, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, vec<4, T, Q> const& b) | |
{ | |
return vec<4, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w)); | |
} | |
}; | |
template<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename T, qualifier Q> | |
struct functor2_vec_sca{}; | |
template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q> | |
struct functor2_vec_sca<vec, 1, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, T b) | |
{ | |
return vec<1, T, Q>(Func(a.x, b)); | |
} | |
}; | |
template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q> | |
struct functor2_vec_sca<vec, 2, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, T b) | |
{ | |
return vec<2, T, Q>(Func(a.x, b), Func(a.y, b)); | |
} | |
}; | |
template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q> | |
struct functor2_vec_sca<vec, 3, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, T b) | |
{ | |
return vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b)); | |
} | |
}; | |
template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q> | |
struct functor2_vec_sca<vec, 4, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, T b) | |
{ | |
return vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b)); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q> | |
struct functor2_vec_int {}; | |
template<typename T, qualifier Q> | |
struct functor2_vec_int<1, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER static vec<1, int, Q> call(int (*Func) (T x, int y), vec<1, T, Q> const& a, vec<1, int, Q> const& b) | |
{ | |
return vec<1, int, Q>(Func(a.x, b.x)); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct functor2_vec_int<2, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER static vec<2, int, Q> call(int (*Func) (T x, int y), vec<2, T, Q> const& a, vec<2, int, Q> const& b) | |
{ | |
return vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y)); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct functor2_vec_int<3, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER static vec<3, int, Q> call(int (*Func) (T x, int y), vec<3, T, Q> const& a, vec<3, int, Q> const& b) | |
{ | |
return vec<3, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z)); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct functor2_vec_int<4, T, Q> | |
{ | |
GLM_FUNC_QUALIFIER static vec<4, int, Q> call(int (*Func) (T x, int y), vec<4, T, Q> const& a, vec<4, int, Q> const& b) | |
{ | |
return vec<4, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w)); | |
} | |
}; | |
} | |
} | |
namespace glm{ | |
namespace detail | |
{ | |
# if GLM_HAS_CXX11_STL | |
using std::log2; | |
# else | |
template<typename genType> | |
genType log2(genType Value) | |
{ | |
return std::log(Value) * static_cast<genType>(1.4426950408889634073599246810019); | |
} | |
# endif | |
template<length_t L, typename T, qualifier Q, bool isFloat, bool Aligned> | |
struct compute_log2 | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'log2' only accept floating-point inputs. Include <glm/gtc/integer.hpp> for integer inputs."); | |
return detail::functor1<vec, L, T, T, Q>::call(log2, v); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_sqrt | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(std::sqrt, x); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_inversesqrt | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) | |
{ | |
return static_cast<T>(1) / sqrt(x); | |
} | |
}; | |
template<length_t L, bool Aligned> | |
struct compute_inversesqrt<L, float, lowp, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, float, lowp> call(vec<L, float, lowp> const& x) | |
{ | |
vec<L, float, lowp> tmp(x); | |
vec<L, float, lowp> xhalf(tmp * 0.5f); | |
vec<L, uint, lowp>* p = reinterpret_cast<vec<L, uint, lowp>*>(const_cast<vec<L, float, lowp>*>(&x)); | |
vec<L, uint, lowp> i = vec<L, uint, lowp>(0x5f375a86) - (*p >> vec<L, uint, lowp>(1)); | |
vec<L, float, lowp>* ptmp = reinterpret_cast<vec<L, float, lowp>*>(&i); | |
tmp = *ptmp; | |
tmp = tmp * (1.5f - xhalf * tmp * tmp); | |
return tmp; | |
} | |
}; | |
} | |
using std::pow; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> pow(vec<L, T, Q> const& base, vec<L, T, Q> const& exponent) | |
{ | |
return detail::functor2<vec, L, T, Q>::call(pow, base, exponent); | |
} | |
using std::exp; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> exp(vec<L, T, Q> const& x) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(exp, x); | |
} | |
using std::log; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> log(vec<L, T, Q> const& x) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(log, x); | |
} | |
# if GLM_HAS_CXX11_STL | |
using std::exp2; | |
# else | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType exp2(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'exp2' only accept floating-point inputs"); | |
return std::exp(static_cast<genType>(0.69314718055994530941723212145818) * x); | |
} | |
# endif | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> exp2(vec<L, T, Q> const& x) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(exp2, x); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType log2(genType x) | |
{ | |
return log2(vec<1, genType>(x)).x; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> log2(vec<L, T, Q> const& x) | |
{ | |
return detail::compute_log2<L, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(x); | |
} | |
using std::sqrt; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> sqrt(vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'sqrt' only accept floating-point inputs"); | |
return detail::compute_sqrt<L, T, Q, detail::is_aligned<Q>::value>::call(x); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType inversesqrt(genType x) | |
{ | |
return static_cast<genType>(1) / sqrt(x); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> inversesqrt(vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'inversesqrt' only accept floating-point inputs"); | |
return detail::compute_inversesqrt<L, T, Q, detail::is_aligned<Q>::value>::call(x); | |
} | |
} | |
#if GLM_CONFIG_SIMD == GLM_ENABLE | |
# include "func_exponential_simd.inl" | |
#endif | |
# 8589 "glm-amalgamated/glm.h" | |
#ifdef max | |
#undef max | |
#endif | |
#ifdef min | |
#undef min | |
#endif | |
#ifdef isnan | |
#undef isnan | |
#endif | |
#ifdef isinf | |
#undef isinf | |
#endif | |
#ifdef log2 | |
#undef log2 | |
#endif | |
#include <climits> | |
#include <cfloat> | |
namespace glm | |
{ | |
#if GLM_HAS_EXTENDED_INTEGER_TYPE | |
typedef std::int8_t int8; | |
typedef std::int16_t int16; | |
typedef std::int32_t int32; | |
typedef std::int64_t int64; | |
typedef std::uint8_t uint8; | |
typedef std::uint16_t uint16; | |
typedef std::uint32_t uint32; | |
typedef std::uint64_t uint64; | |
#else | |
typedef signed char int8; | |
typedef signed short int16; | |
typedef signed int int32; | |
typedef detail::int64 int64; | |
typedef unsigned char uint8; | |
typedef unsigned short uint16; | |
typedef unsigned int uint32; | |
typedef detail::uint64 uint64; | |
#endif | |
typedef int8 lowp_i8; | |
typedef int8 mediump_i8; | |
typedef int8 highp_i8; | |
typedef int8 i8; | |
typedef int8 lowp_int8; | |
typedef int8 mediump_int8; | |
typedef int8 highp_int8; | |
typedef int8 lowp_int8_t; | |
typedef int8 mediump_int8_t; | |
typedef int8 highp_int8_t; | |
typedef int8 int8_t; | |
typedef int16 lowp_i16; | |
typedef int16 mediump_i16; | |
typedef int16 highp_i16; | |
typedef int16 i16; | |
typedef int16 lowp_int16; | |
typedef int16 mediump_int16; | |
typedef int16 highp_int16; | |
typedef int16 lowp_int16_t; | |
typedef int16 mediump_int16_t; | |
typedef int16 highp_int16_t; | |
typedef int16 int16_t; | |
typedef int32 lowp_i32; | |
typedef int32 mediump_i32; | |
typedef int32 highp_i32; | |
typedef int32 i32; | |
typedef int32 lowp_int32; | |
typedef int32 mediump_int32; | |
typedef int32 highp_int32; | |
typedef int32 lowp_int32_t; | |
typedef int32 mediump_int32_t; | |
typedef int32 highp_int32_t; | |
typedef int32 int32_t; | |
typedef int64 lowp_i64; | |
typedef int64 mediump_i64; | |
typedef int64 highp_i64; | |
typedef int64 i64; | |
typedef int64 lowp_int64; | |
typedef int64 mediump_int64; | |
typedef int64 highp_int64; | |
typedef int64 lowp_int64_t; | |
typedef int64 mediump_int64_t; | |
typedef int64 highp_int64_t; | |
typedef int64 int64_t; | |
typedef unsigned int uint; | |
typedef uint8 lowp_u8; | |
typedef uint8 mediump_u8; | |
typedef uint8 highp_u8; | |
typedef uint8 u8; | |
typedef uint8 lowp_uint8; | |
typedef uint8 mediump_uint8; | |
typedef uint8 highp_uint8; | |
typedef uint8 lowp_uint8_t; | |
typedef uint8 mediump_uint8_t; | |
typedef uint8 highp_uint8_t; | |
typedef uint8 uint8_t; | |
typedef uint16 lowp_u16; | |
typedef uint16 mediump_u16; | |
typedef uint16 highp_u16; | |
typedef uint16 u16; | |
typedef uint16 lowp_uint16; | |
typedef uint16 mediump_uint16; | |
typedef uint16 highp_uint16; | |
typedef uint16 lowp_uint16_t; | |
typedef uint16 mediump_uint16_t; | |
typedef uint16 highp_uint16_t; | |
typedef uint16 uint16_t; | |
typedef uint32 lowp_u32; | |
typedef uint32 mediump_u32; | |
typedef uint32 highp_u32; | |
typedef uint32 u32; | |
typedef uint32 lowp_uint32; | |
typedef uint32 mediump_uint32; | |
typedef uint32 highp_uint32; | |
typedef uint32 lowp_uint32_t; | |
typedef uint32 mediump_uint32_t; | |
typedef uint32 highp_uint32_t; | |
typedef uint32 uint32_t; | |
typedef uint64 lowp_u64; | |
typedef uint64 mediump_u64; | |
typedef uint64 highp_u64; | |
typedef uint64 u64; | |
typedef uint64 lowp_uint64; | |
typedef uint64 mediump_uint64; | |
typedef uint64 highp_uint64; | |
typedef uint64 lowp_uint64_t; | |
typedef uint64 mediump_uint64_t; | |
typedef uint64 highp_uint64_t; | |
typedef uint64 uint64_t; | |
typedef float lowp_f32; | |
typedef float mediump_f32; | |
typedef float highp_f32; | |
typedef float f32; | |
typedef float lowp_float32; | |
typedef float mediump_float32; | |
typedef float highp_float32; | |
typedef float float32; | |
typedef float lowp_float32_t; | |
typedef float mediump_float32_t; | |
typedef float highp_float32_t; | |
typedef float float32_t; | |
typedef double lowp_f64; | |
typedef double mediump_f64; | |
typedef double highp_f64; | |
typedef double f64; | |
typedef double lowp_float64; | |
typedef double mediump_float64; | |
typedef double highp_float64; | |
typedef double float64; | |
typedef double lowp_float64_t; | |
typedef double mediump_float64_t; | |
typedef double highp_float64_t; | |
typedef double float64_t; | |
typedef vec<1, bool, lowp> lowp_bvec1; | |
typedef vec<2, bool, lowp> lowp_bvec2; | |
typedef vec<3, bool, lowp> lowp_bvec3; | |
typedef vec<4, bool, lowp> lowp_bvec4; | |
typedef vec<1, bool, mediump> mediump_bvec1; | |
typedef vec<2, bool, mediump> mediump_bvec2; | |
typedef vec<3, bool, mediump> mediump_bvec3; | |
typedef vec<4, bool, mediump> mediump_bvec4; | |
typedef vec<1, bool, highp> highp_bvec1; | |
typedef vec<2, bool, highp> highp_bvec2; | |
typedef vec<3, bool, highp> highp_bvec3; | |
typedef vec<4, bool, highp> highp_bvec4; | |
typedef vec<1, bool, defaultp> bvec1; | |
typedef vec<2, bool, defaultp> bvec2; | |
typedef vec<3, bool, defaultp> bvec3; | |
typedef vec<4, bool, defaultp> bvec4; | |
typedef vec<1, int, lowp> lowp_ivec1; | |
typedef vec<2, int, lowp> lowp_ivec2; | |
typedef vec<3, int, lowp> lowp_ivec3; | |
typedef vec<4, int, lowp> lowp_ivec4; | |
typedef vec<1, int, mediump> mediump_ivec1; | |
typedef vec<2, int, mediump> mediump_ivec2; | |
typedef vec<3, int, mediump> mediump_ivec3; | |
typedef vec<4, int, mediump> mediump_ivec4; | |
typedef vec<1, int, highp> highp_ivec1; | |
typedef vec<2, int, highp> highp_ivec2; | |
typedef vec<3, int, highp> highp_ivec3; | |
typedef vec<4, int, highp> highp_ivec4; | |
typedef vec<1, int, defaultp> ivec1; | |
typedef vec<2, int, defaultp> ivec2; | |
typedef vec<3, int, defaultp> ivec3; | |
typedef vec<4, int, defaultp> ivec4; | |
typedef vec<1, i8, lowp> lowp_i8vec1; | |
typedef vec<2, i8, lowp> lowp_i8vec2; | |
typedef vec<3, i8, lowp> lowp_i8vec3; | |
typedef vec<4, i8, lowp> lowp_i8vec4; | |
typedef vec<1, i8, mediump> mediump_i8vec1; | |
typedef vec<2, i8, mediump> mediump_i8vec2; | |
typedef vec<3, i8, mediump> mediump_i8vec3; | |
typedef vec<4, i8, mediump> mediump_i8vec4; | |
typedef vec<1, i8, highp> highp_i8vec1; | |
typedef vec<2, i8, highp> highp_i8vec2; | |
typedef vec<3, i8, highp> highp_i8vec3; | |
typedef vec<4, i8, highp> highp_i8vec4; | |
typedef vec<1, i8, defaultp> i8vec1; | |
typedef vec<2, i8, defaultp> i8vec2; | |
typedef vec<3, i8, defaultp> i8vec3; | |
typedef vec<4, i8, defaultp> i8vec4; | |
typedef vec<1, i16, lowp> lowp_i16vec1; | |
typedef vec<2, i16, lowp> lowp_i16vec2; | |
typedef vec<3, i16, lowp> lowp_i16vec3; | |
typedef vec<4, i16, lowp> lowp_i16vec4; | |
typedef vec<1, i16, mediump> mediump_i16vec1; | |
typedef vec<2, i16, mediump> mediump_i16vec2; | |
typedef vec<3, i16, mediump> mediump_i16vec3; | |
typedef vec<4, i16, mediump> mediump_i16vec4; | |
typedef vec<1, i16, highp> highp_i16vec1; | |
typedef vec<2, i16, highp> highp_i16vec2; | |
typedef vec<3, i16, highp> highp_i16vec3; | |
typedef vec<4, i16, highp> highp_i16vec4; | |
typedef vec<1, i16, defaultp> i16vec1; | |
typedef vec<2, i16, defaultp> i16vec2; | |
typedef vec<3, i16, defaultp> i16vec3; | |
typedef vec<4, i16, defaultp> i16vec4; | |
typedef vec<1, i32, lowp> lowp_i32vec1; | |
typedef vec<2, i32, lowp> lowp_i32vec2; | |
typedef vec<3, i32, lowp> lowp_i32vec3; | |
typedef vec<4, i32, lowp> lowp_i32vec4; | |
typedef vec<1, i32, mediump> mediump_i32vec1; | |
typedef vec<2, i32, mediump> mediump_i32vec2; | |
typedef vec<3, i32, mediump> mediump_i32vec3; | |
typedef vec<4, i32, mediump> mediump_i32vec4; | |
typedef vec<1, i32, highp> highp_i32vec1; | |
typedef vec<2, i32, highp> highp_i32vec2; | |
typedef vec<3, i32, highp> highp_i32vec3; | |
typedef vec<4, i32, highp> highp_i32vec4; | |
typedef vec<1, i32, defaultp> i32vec1; | |
typedef vec<2, i32, defaultp> i32vec2; | |
typedef vec<3, i32, defaultp> i32vec3; | |
typedef vec<4, i32, defaultp> i32vec4; | |
typedef vec<1, i64, lowp> lowp_i64vec1; | |
typedef vec<2, i64, lowp> lowp_i64vec2; | |
typedef vec<3, i64, lowp> lowp_i64vec3; | |
typedef vec<4, i64, lowp> lowp_i64vec4; | |
typedef vec<1, i64, mediump> mediump_i64vec1; | |
typedef vec<2, i64, mediump> mediump_i64vec2; | |
typedef vec<3, i64, mediump> mediump_i64vec3; | |
typedef vec<4, i64, mediump> mediump_i64vec4; | |
typedef vec<1, i64, highp> highp_i64vec1; | |
typedef vec<2, i64, highp> highp_i64vec2; | |
typedef vec<3, i64, highp> highp_i64vec3; | |
typedef vec<4, i64, highp> highp_i64vec4; | |
typedef vec<1, i64, defaultp> i64vec1; | |
typedef vec<2, i64, defaultp> i64vec2; | |
typedef vec<3, i64, defaultp> i64vec3; | |
typedef vec<4, i64, defaultp> i64vec4; | |
typedef vec<1, uint, lowp> lowp_uvec1; | |
typedef vec<2, uint, lowp> lowp_uvec2; | |
typedef vec<3, uint, lowp> lowp_uvec3; | |
typedef vec<4, uint, lowp> lowp_uvec4; | |
typedef vec<1, uint, mediump> mediump_uvec1; | |
typedef vec<2, uint, mediump> mediump_uvec2; | |
typedef vec<3, uint, mediump> mediump_uvec3; | |
typedef vec<4, uint, mediump> mediump_uvec4; | |
typedef vec<1, uint, highp> highp_uvec1; | |
typedef vec<2, uint, highp> highp_uvec2; | |
typedef vec<3, uint, highp> highp_uvec3; | |
typedef vec<4, uint, highp> highp_uvec4; | |
typedef vec<1, uint, defaultp> uvec1; | |
typedef vec<2, uint, defaultp> uvec2; | |
typedef vec<3, uint, defaultp> uvec3; | |
typedef vec<4, uint, defaultp> uvec4; | |
typedef vec<1, u8, lowp> lowp_u8vec1; | |
typedef vec<2, u8, lowp> lowp_u8vec2; | |
typedef vec<3, u8, lowp> lowp_u8vec3; | |
typedef vec<4, u8, lowp> lowp_u8vec4; | |
typedef vec<1, u8, mediump> mediump_u8vec1; | |
typedef vec<2, u8, mediump> mediump_u8vec2; | |
typedef vec<3, u8, mediump> mediump_u8vec3; | |
typedef vec<4, u8, mediump> mediump_u8vec4; | |
typedef vec<1, u8, highp> highp_u8vec1; | |
typedef vec<2, u8, highp> highp_u8vec2; | |
typedef vec<3, u8, highp> highp_u8vec3; | |
typedef vec<4, u8, highp> highp_u8vec4; | |
typedef vec<1, u8, defaultp> u8vec1; | |
typedef vec<2, u8, defaultp> u8vec2; | |
typedef vec<3, u8, defaultp> u8vec3; | |
typedef vec<4, u8, defaultp> u8vec4; | |
typedef vec<1, u16, lowp> lowp_u16vec1; | |
typedef vec<2, u16, lowp> lowp_u16vec2; | |
typedef vec<3, u16, lowp> lowp_u16vec3; | |
typedef vec<4, u16, lowp> lowp_u16vec4; | |
typedef vec<1, u16, mediump> mediump_u16vec1; | |
typedef vec<2, u16, mediump> mediump_u16vec2; | |
typedef vec<3, u16, mediump> mediump_u16vec3; | |
typedef vec<4, u16, mediump> mediump_u16vec4; | |
typedef vec<1, u16, highp> highp_u16vec1; | |
typedef vec<2, u16, highp> highp_u16vec2; | |
typedef vec<3, u16, highp> highp_u16vec3; | |
typedef vec<4, u16, highp> highp_u16vec4; | |
typedef vec<1, u16, defaultp> u16vec1; | |
typedef vec<2, u16, defaultp> u16vec2; | |
typedef vec<3, u16, defaultp> u16vec3; | |
typedef vec<4, u16, defaultp> u16vec4; | |
typedef vec<1, u32, lowp> lowp_u32vec1; | |
typedef vec<2, u32, lowp> lowp_u32vec2; | |
typedef vec<3, u32, lowp> lowp_u32vec3; | |
typedef vec<4, u32, lowp> lowp_u32vec4; | |
typedef vec<1, u32, mediump> mediump_u32vec1; | |
typedef vec<2, u32, mediump> mediump_u32vec2; | |
typedef vec<3, u32, mediump> mediump_u32vec3; | |
typedef vec<4, u32, mediump> mediump_u32vec4; | |
typedef vec<1, u32, highp> highp_u32vec1; | |
typedef vec<2, u32, highp> highp_u32vec2; | |
typedef vec<3, u32, highp> highp_u32vec3; | |
typedef vec<4, u32, highp> highp_u32vec4; | |
typedef vec<1, u32, defaultp> u32vec1; | |
typedef vec<2, u32, defaultp> u32vec2; | |
typedef vec<3, u32, defaultp> u32vec3; | |
typedef vec<4, u32, defaultp> u32vec4; | |
typedef vec<1, u64, lowp> lowp_u64vec1; | |
typedef vec<2, u64, lowp> lowp_u64vec2; | |
typedef vec<3, u64, lowp> lowp_u64vec3; | |
typedef vec<4, u64, lowp> lowp_u64vec4; | |
typedef vec<1, u64, mediump> mediump_u64vec1; | |
typedef vec<2, u64, mediump> mediump_u64vec2; | |
typedef vec<3, u64, mediump> mediump_u64vec3; | |
typedef vec<4, u64, mediump> mediump_u64vec4; | |
typedef vec<1, u64, highp> highp_u64vec1; | |
typedef vec<2, u64, highp> highp_u64vec2; | |
typedef vec<3, u64, highp> highp_u64vec3; | |
typedef vec<4, u64, highp> highp_u64vec4; | |
typedef vec<1, u64, defaultp> u64vec1; | |
typedef vec<2, u64, defaultp> u64vec2; | |
typedef vec<3, u64, defaultp> u64vec3; | |
typedef vec<4, u64, defaultp> u64vec4; | |
typedef vec<1, float, lowp> lowp_vec1; | |
typedef vec<2, float, lowp> lowp_vec2; | |
typedef vec<3, float, lowp> lowp_vec3; | |
typedef vec<4, float, lowp> lowp_vec4; | |
typedef vec<1, float, mediump> mediump_vec1; | |
typedef vec<2, float, mediump> mediump_vec2; | |
typedef vec<3, float, mediump> mediump_vec3; | |
typedef vec<4, float, mediump> mediump_vec4; | |
typedef vec<1, float, highp> highp_vec1; | |
typedef vec<2, float, highp> highp_vec2; | |
typedef vec<3, float, highp> highp_vec3; | |
typedef vec<4, float, highp> highp_vec4; | |
typedef vec<1, float, defaultp> vec1; | |
typedef vec<2, float, defaultp> vec2; | |
typedef vec<3, float, defaultp> vec3; | |
typedef vec<4, float, defaultp> vec4; | |
typedef vec<1, float, lowp> lowp_fvec1; | |
typedef vec<2, float, lowp> lowp_fvec2; | |
typedef vec<3, float, lowp> lowp_fvec3; | |
typedef vec<4, float, lowp> lowp_fvec4; | |
typedef vec<1, float, mediump> mediump_fvec1; | |
typedef vec<2, float, mediump> mediump_fvec2; | |
typedef vec<3, float, mediump> mediump_fvec3; | |
typedef vec<4, float, mediump> mediump_fvec4; | |
typedef vec<1, float, highp> highp_fvec1; | |
typedef vec<2, float, highp> highp_fvec2; | |
typedef vec<3, float, highp> highp_fvec3; | |
typedef vec<4, float, highp> highp_fvec4; | |
typedef vec<1, f32, defaultp> fvec1; | |
typedef vec<2, f32, defaultp> fvec2; | |
typedef vec<3, f32, defaultp> fvec3; | |
typedef vec<4, f32, defaultp> fvec4; | |
typedef vec<1, f32, lowp> lowp_f32vec1; | |
typedef vec<2, f32, lowp> lowp_f32vec2; | |
typedef vec<3, f32, lowp> lowp_f32vec3; | |
typedef vec<4, f32, lowp> lowp_f32vec4; | |
typedef vec<1, f32, mediump> mediump_f32vec1; | |
typedef vec<2, f32, mediump> mediump_f32vec2; | |
typedef vec<3, f32, mediump> mediump_f32vec3; | |
typedef vec<4, f32, mediump> mediump_f32vec4; | |
typedef vec<1, f32, highp> highp_f32vec1; | |
typedef vec<2, f32, highp> highp_f32vec2; | |
typedef vec<3, f32, highp> highp_f32vec3; | |
typedef vec<4, f32, highp> highp_f32vec4; | |
typedef vec<1, f32, defaultp> f32vec1; | |
typedef vec<2, f32, defaultp> f32vec2; | |
typedef vec<3, f32, defaultp> f32vec3; | |
typedef vec<4, f32, defaultp> f32vec4; | |
typedef vec<1, f64, lowp> lowp_dvec1; | |
typedef vec<2, f64, lowp> lowp_dvec2; | |
typedef vec<3, f64, lowp> lowp_dvec3; | |
typedef vec<4, f64, lowp> lowp_dvec4; | |
typedef vec<1, f64, mediump> mediump_dvec1; | |
typedef vec<2, f64, mediump> mediump_dvec2; | |
typedef vec<3, f64, mediump> mediump_dvec3; | |
typedef vec<4, f64, mediump> mediump_dvec4; | |
typedef vec<1, f64, highp> highp_dvec1; | |
typedef vec<2, f64, highp> highp_dvec2; | |
typedef vec<3, f64, highp> highp_dvec3; | |
typedef vec<4, f64, highp> highp_dvec4; | |
typedef vec<1, f64, defaultp> dvec1; | |
typedef vec<2, f64, defaultp> dvec2; | |
typedef vec<3, f64, defaultp> dvec3; | |
typedef vec<4, f64, defaultp> dvec4; | |
typedef vec<1, f64, lowp> lowp_f64vec1; | |
typedef vec<2, f64, lowp> lowp_f64vec2; | |
typedef vec<3, f64, lowp> lowp_f64vec3; | |
typedef vec<4, f64, lowp> lowp_f64vec4; | |
typedef vec<1, f64, mediump> mediump_f64vec1; | |
typedef vec<2, f64, mediump> mediump_f64vec2; | |
typedef vec<3, f64, mediump> mediump_f64vec3; | |
typedef vec<4, f64, mediump> mediump_f64vec4; | |
typedef vec<1, f64, highp> highp_f64vec1; | |
typedef vec<2, f64, highp> highp_f64vec2; | |
typedef vec<3, f64, highp> highp_f64vec3; | |
typedef vec<4, f64, highp> highp_f64vec4; | |
typedef vec<1, f64, defaultp> f64vec1; | |
typedef vec<2, f64, defaultp> f64vec2; | |
typedef vec<3, f64, defaultp> f64vec3; | |
typedef vec<4, f64, defaultp> f64vec4; | |
typedef mat<2, 2, f32, lowp> lowp_mat2; | |
typedef mat<3, 3, f32, lowp> lowp_mat3; | |
typedef mat<4, 4, f32, lowp> lowp_mat4; | |
typedef mat<2, 2, f32, mediump> mediump_mat2; | |
typedef mat<3, 3, f32, mediump> mediump_mat3; | |
typedef mat<4, 4, f32, mediump> mediump_mat4; | |
typedef mat<2, 2, f32, highp> highp_mat2; | |
typedef mat<3, 3, f32, highp> highp_mat3; | |
typedef mat<4, 4, f32, highp> highp_mat4; | |
typedef mat<2, 2, f32, defaultp> mat2; | |
typedef mat<3, 3, f32, defaultp> mat3; | |
typedef mat<4, 4, f32, defaultp> mat4; | |
typedef mat<2, 2, f32, lowp> lowp_fmat2; | |
typedef mat<3, 3, f32, lowp> lowp_fmat3; | |
typedef mat<4, 4, f32, lowp> lowp_fmat4; | |
typedef mat<2, 2, f32, mediump> mediump_fmat2; | |
typedef mat<3, 3, f32, mediump> mediump_fmat3; | |
typedef mat<4, 4, f32, mediump> mediump_fmat4; | |
typedef mat<2, 2, f32, highp> highp_fmat2; | |
typedef mat<3, 3, f32, highp> highp_fmat3; | |
typedef mat<4, 4, f32, highp> highp_fmat4; | |
typedef mat<2, 2, f32, defaultp> fmat2; | |
typedef mat<3, 3, f32, defaultp> fmat3; | |
typedef mat<4, 4, f32, defaultp> fmat4; | |
typedef mat<2, 2, f32, lowp> lowp_f32mat2; | |
typedef mat<3, 3, f32, lowp> lowp_f32mat3; | |
typedef mat<4, 4, f32, lowp> lowp_f32mat4; | |
typedef mat<2, 2, f32, mediump> mediump_f32mat2; | |
typedef mat<3, 3, f32, mediump> mediump_f32mat3; | |
typedef mat<4, 4, f32, mediump> mediump_f32mat4; | |
typedef mat<2, 2, f32, highp> highp_f32mat2; | |
typedef mat<3, 3, f32, highp> highp_f32mat3; | |
typedef mat<4, 4, f32, highp> highp_f32mat4; | |
typedef mat<2, 2, f32, defaultp> f32mat2; | |
typedef mat<3, 3, f32, defaultp> f32mat3; | |
typedef mat<4, 4, f32, defaultp> f32mat4; | |
typedef mat<2, 2, f64, lowp> lowp_dmat2; | |
typedef mat<3, 3, f64, lowp> lowp_dmat3; | |
typedef mat<4, 4, f64, lowp> lowp_dmat4; | |
typedef mat<2, 2, f64, mediump> mediump_dmat2; | |
typedef mat<3, 3, f64, mediump> mediump_dmat3; | |
typedef mat<4, 4, f64, mediump> mediump_dmat4; | |
typedef mat<2, 2, f64, highp> highp_dmat2; | |
typedef mat<3, 3, f64, highp> highp_dmat3; | |
typedef mat<4, 4, f64, highp> highp_dmat4; | |
typedef mat<2, 2, f64, defaultp> dmat2; | |
typedef mat<3, 3, f64, defaultp> dmat3; | |
typedef mat<4, 4, f64, defaultp> dmat4; | |
typedef mat<2, 2, f64, lowp> lowp_f64mat2; | |
typedef mat<3, 3, f64, lowp> lowp_f64mat3; | |
typedef mat<4, 4, f64, lowp> lowp_f64mat4; | |
typedef mat<2, 2, f64, mediump> mediump_f64mat2; | |
typedef mat<3, 3, f64, mediump> mediump_f64mat3; | |
typedef mat<4, 4, f64, mediump> mediump_f64mat4; | |
typedef mat<2, 2, f64, highp> highp_f64mat2; | |
typedef mat<3, 3, f64, highp> highp_f64mat3; | |
typedef mat<4, 4, f64, highp> highp_f64mat4; | |
typedef mat<2, 2, f64, defaultp> f64mat2; | |
typedef mat<3, 3, f64, defaultp> f64mat3; | |
typedef mat<4, 4, f64, defaultp> f64mat4; | |
typedef mat<2, 2, f32, lowp> lowp_mat2x2; | |
typedef mat<2, 3, f32, lowp> lowp_mat2x3; | |
typedef mat<2, 4, f32, lowp> lowp_mat2x4; | |
typedef mat<3, 2, f32, lowp> lowp_mat3x2; | |
typedef mat<3, 3, f32, lowp> lowp_mat3x3; | |
typedef mat<3, 4, f32, lowp> lowp_mat3x4; | |
typedef mat<4, 2, f32, lowp> lowp_mat4x2; | |
typedef mat<4, 3, f32, lowp> lowp_mat4x3; | |
typedef mat<4, 4, f32, lowp> lowp_mat4x4; | |
typedef mat<2, 2, f32, mediump> mediump_mat2x2; | |
typedef mat<2, 3, f32, mediump> mediump_mat2x3; | |
typedef mat<2, 4, f32, mediump> mediump_mat2x4; | |
typedef mat<3, 2, f32, mediump> mediump_mat3x2; | |
typedef mat<3, 3, f32, mediump> mediump_mat3x3; | |
typedef mat<3, 4, f32, mediump> mediump_mat3x4; | |
typedef mat<4, 2, f32, mediump> mediump_mat4x2; | |
typedef mat<4, 3, f32, mediump> mediump_mat4x3; | |
typedef mat<4, 4, f32, mediump> mediump_mat4x4; | |
typedef mat<2, 2, f32, highp> highp_mat2x2; | |
typedef mat<2, 3, f32, highp> highp_mat2x3; | |
typedef mat<2, 4, f32, highp> highp_mat2x4; | |
typedef mat<3, 2, f32, highp> highp_mat3x2; | |
typedef mat<3, 3, f32, highp> highp_mat3x3; | |
typedef mat<3, 4, f32, highp> highp_mat3x4; | |
typedef mat<4, 2, f32, highp> highp_mat4x2; | |
typedef mat<4, 3, f32, highp> highp_mat4x3; | |
typedef mat<4, 4, f32, highp> highp_mat4x4; | |
typedef mat<2, 2, f32, defaultp> mat2x2; | |
typedef mat<3, 2, f32, defaultp> mat3x2; | |
typedef mat<4, 2, f32, defaultp> mat4x2; | |
typedef mat<2, 3, f32, defaultp> mat2x3; | |
typedef mat<3, 3, f32, defaultp> mat3x3; | |
typedef mat<4, 3, f32, defaultp> mat4x3; | |
typedef mat<2, 4, f32, defaultp> mat2x4; | |
typedef mat<3, 4, f32, defaultp> mat3x4; | |
typedef mat<4, 4, f32, defaultp> mat4x4; | |
typedef mat<2, 2, f32, lowp> lowp_fmat2x2; | |
typedef mat<2, 3, f32, lowp> lowp_fmat2x3; | |
typedef mat<2, 4, f32, lowp> lowp_fmat2x4; | |
typedef mat<3, 2, f32, lowp> lowp_fmat3x2; | |
typedef mat<3, 3, f32, lowp> lowp_fmat3x3; | |
typedef mat<3, 4, f32, lowp> lowp_fmat3x4; | |
typedef mat<4, 2, f32, lowp> lowp_fmat4x2; | |
typedef mat<4, 3, f32, lowp> lowp_fmat4x3; | |
typedef mat<4, 4, f32, lowp> lowp_fmat4x4; | |
typedef mat<2, 2, f32, mediump> mediump_fmat2x2; | |
typedef mat<2, 3, f32, mediump> mediump_fmat2x3; | |
typedef mat<2, 4, f32, mediump> mediump_fmat2x4; | |
typedef mat<3, 2, f32, mediump> mediump_fmat3x2; | |
typedef mat<3, 3, f32, mediump> mediump_fmat3x3; | |
typedef mat<3, 4, f32, mediump> mediump_fmat3x4; | |
typedef mat<4, 2, f32, mediump> mediump_fmat4x2; | |
typedef mat<4, 3, f32, mediump> mediump_fmat4x3; | |
typedef mat<4, 4, f32, mediump> mediump_fmat4x4; | |
typedef mat<2, 2, f32, highp> highp_fmat2x2; | |
typedef mat<2, 3, f32, highp> highp_fmat2x3; | |
typedef mat<2, 4, f32, highp> highp_fmat2x4; | |
typedef mat<3, 2, f32, highp> highp_fmat3x2; | |
typedef mat<3, 3, f32, highp> highp_fmat3x3; | |
typedef mat<3, 4, f32, highp> highp_fmat3x4; | |
typedef mat<4, 2, f32, highp> highp_fmat4x2; | |
typedef mat<4, 3, f32, highp> highp_fmat4x3; | |
typedef mat<4, 4, f32, highp> highp_fmat4x4; | |
typedef mat<2, 2, f32, defaultp> fmat2x2; | |
typedef mat<3, 2, f32, defaultp> fmat3x2; | |
typedef mat<4, 2, f32, defaultp> fmat4x2; | |
typedef mat<2, 3, f32, defaultp> fmat2x3; | |
typedef mat<3, 3, f32, defaultp> fmat3x3; | |
typedef mat<4, 3, f32, defaultp> fmat4x3; | |
typedef mat<2, 4, f32, defaultp> fmat2x4; | |
typedef mat<3, 4, f32, defaultp> fmat3x4; | |
typedef mat<4, 4, f32, defaultp> fmat4x4; | |
typedef mat<2, 2, f32, lowp> lowp_f32mat2x2; | |
typedef mat<2, 3, f32, lowp> lowp_f32mat2x3; | |
typedef mat<2, 4, f32, lowp> lowp_f32mat2x4; | |
typedef mat<3, 2, f32, lowp> lowp_f32mat3x2; | |
typedef mat<3, 3, f32, lowp> lowp_f32mat3x3; | |
typedef mat<3, 4, f32, lowp> lowp_f32mat3x4; | |
typedef mat<4, 2, f32, lowp> lowp_f32mat4x2; | |
typedef mat<4, 3, f32, lowp> lowp_f32mat4x3; | |
typedef mat<4, 4, f32, lowp> lowp_f32mat4x4; | |
typedef mat<2, 2, f32, mediump> mediump_f32mat2x2; | |
typedef mat<2, 3, f32, mediump> mediump_f32mat2x3; | |
typedef mat<2, 4, f32, mediump> mediump_f32mat2x4; | |
typedef mat<3, 2, f32, mediump> mediump_f32mat3x2; | |
typedef mat<3, 3, f32, mediump> mediump_f32mat3x3; | |
typedef mat<3, 4, f32, mediump> mediump_f32mat3x4; | |
typedef mat<4, 2, f32, mediump> mediump_f32mat4x2; | |
typedef mat<4, 3, f32, mediump> mediump_f32mat4x3; | |
typedef mat<4, 4, f32, mediump> mediump_f32mat4x4; | |
typedef mat<2, 2, f32, highp> highp_f32mat2x2; | |
typedef mat<2, 3, f32, highp> highp_f32mat2x3; | |
typedef mat<2, 4, f32, highp> highp_f32mat2x4; | |
typedef mat<3, 2, f32, highp> highp_f32mat3x2; | |
typedef mat<3, 3, f32, highp> highp_f32mat3x3; | |
typedef mat<3, 4, f32, highp> highp_f32mat3x4; | |
typedef mat<4, 2, f32, highp> highp_f32mat4x2; | |
typedef mat<4, 3, f32, highp> highp_f32mat4x3; | |
typedef mat<4, 4, f32, highp> highp_f32mat4x4; | |
typedef mat<2, 2, f32, defaultp> f32mat2x2; | |
typedef mat<3, 2, f32, defaultp> f32mat3x2; | |
typedef mat<4, 2, f32, defaultp> f32mat4x2; | |
typedef mat<2, 3, f32, defaultp> f32mat2x3; | |
typedef mat<3, 3, f32, defaultp> f32mat3x3; | |
typedef mat<4, 3, f32, defaultp> f32mat4x3; | |
typedef mat<2, 4, f32, defaultp> f32mat2x4; | |
typedef mat<3, 4, f32, defaultp> f32mat3x4; | |
typedef mat<4, 4, f32, defaultp> f32mat4x4; | |
typedef mat<2, 2, double, lowp> lowp_dmat2x2; | |
typedef mat<2, 3, double, lowp> lowp_dmat2x3; | |
typedef mat<2, 4, double, lowp> lowp_dmat2x4; | |
typedef mat<3, 2, double, lowp> lowp_dmat3x2; | |
typedef mat<3, 3, double, lowp> lowp_dmat3x3; | |
typedef mat<3, 4, double, lowp> lowp_dmat3x4; | |
typedef mat<4, 2, double, lowp> lowp_dmat4x2; | |
typedef mat<4, 3, double, lowp> lowp_dmat4x3; | |
typedef mat<4, 4, double, lowp> lowp_dmat4x4; | |
typedef mat<2, 2, double, mediump> mediump_dmat2x2; | |
typedef mat<2, 3, double, mediump> mediump_dmat2x3; | |
typedef mat<2, 4, double, mediump> mediump_dmat2x4; | |
typedef mat<3, 2, double, mediump> mediump_dmat3x2; | |
typedef mat<3, 3, double, mediump> mediump_dmat3x3; | |
typedef mat<3, 4, double, mediump> mediump_dmat3x4; | |
typedef mat<4, 2, double, mediump> mediump_dmat4x2; | |
typedef mat<4, 3, double, mediump> mediump_dmat4x3; | |
typedef mat<4, 4, double, mediump> mediump_dmat4x4; | |
typedef mat<2, 2, double, highp> highp_dmat2x2; | |
typedef mat<2, 3, double, highp> highp_dmat2x3; | |
typedef mat<2, 4, double, highp> highp_dmat2x4; | |
typedef mat<3, 2, double, highp> highp_dmat3x2; | |
typedef mat<3, 3, double, highp> highp_dmat3x3; | |
typedef mat<3, 4, double, highp> highp_dmat3x4; | |
typedef mat<4, 2, double, highp> highp_dmat4x2; | |
typedef mat<4, 3, double, highp> highp_dmat4x3; | |
typedef mat<4, 4, double, highp> highp_dmat4x4; | |
typedef mat<2, 2, double, defaultp> dmat2x2; | |
typedef mat<3, 2, double, defaultp> dmat3x2; | |
typedef mat<4, 2, double, defaultp> dmat4x2; | |
typedef mat<2, 3, double, defaultp> dmat2x3; | |
typedef mat<3, 3, double, defaultp> dmat3x3; | |
typedef mat<4, 3, double, defaultp> dmat4x3; | |
typedef mat<2, 4, double, defaultp> dmat2x4; | |
typedef mat<3, 4, double, defaultp> dmat3x4; | |
typedef mat<4, 4, double, defaultp> dmat4x4; | |
typedef mat<2, 2, f64, lowp> lowp_f64mat2x2; | |
typedef mat<2, 3, f64, lowp> lowp_f64mat2x3; | |
typedef mat<2, 4, f64, lowp> lowp_f64mat2x4; | |
typedef mat<3, 2, f64, lowp> lowp_f64mat3x2; | |
typedef mat<3, 3, f64, lowp> lowp_f64mat3x3; | |
typedef mat<3, 4, f64, lowp> lowp_f64mat3x4; | |
typedef mat<4, 2, f64, lowp> lowp_f64mat4x2; | |
typedef mat<4, 3, f64, lowp> lowp_f64mat4x3; | |
typedef mat<4, 4, f64, lowp> lowp_f64mat4x4; | |
typedef mat<2, 2, f64, mediump> mediump_f64mat2x2; | |
typedef mat<2, 3, f64, mediump> mediump_f64mat2x3; | |
typedef mat<2, 4, f64, mediump> mediump_f64mat2x4; | |
typedef mat<3, 2, f64, mediump> mediump_f64mat3x2; | |
typedef mat<3, 3, f64, mediump> mediump_f64mat3x3; | |
typedef mat<3, 4, f64, mediump> mediump_f64mat3x4; | |
typedef mat<4, 2, f64, mediump> mediump_f64mat4x2; | |
typedef mat<4, 3, f64, mediump> mediump_f64mat4x3; | |
typedef mat<4, 4, f64, mediump> mediump_f64mat4x4; | |
typedef mat<2, 2, f64, highp> highp_f64mat2x2; | |
typedef mat<2, 3, f64, highp> highp_f64mat2x3; | |
typedef mat<2, 4, f64, highp> highp_f64mat2x4; | |
typedef mat<3, 2, f64, highp> highp_f64mat3x2; | |
typedef mat<3, 3, f64, highp> highp_f64mat3x3; | |
typedef mat<3, 4, f64, highp> highp_f64mat3x4; | |
typedef mat<4, 2, f64, highp> highp_f64mat4x2; | |
typedef mat<4, 3, f64, highp> highp_f64mat4x3; | |
typedef mat<4, 4, f64, highp> highp_f64mat4x4; | |
typedef mat<2, 2, f64, defaultp> f64mat2x2; | |
typedef mat<3, 2, f64, defaultp> f64mat3x2; | |
typedef mat<4, 2, f64, defaultp> f64mat4x2; | |
typedef mat<2, 3, f64, defaultp> f64mat2x3; | |
typedef mat<3, 3, f64, defaultp> f64mat3x3; | |
typedef mat<4, 3, f64, defaultp> f64mat4x3; | |
typedef mat<2, 4, f64, defaultp> f64mat2x4; | |
typedef mat<3, 4, f64, defaultp> f64mat3x4; | |
typedef mat<4, 4, f64, defaultp> f64mat4x4; | |
typedef mat<2, 2, int, lowp> lowp_imat2x2; | |
typedef mat<2, 3, int, lowp> lowp_imat2x3; | |
typedef mat<2, 4, int, lowp> lowp_imat2x4; | |
typedef mat<3, 2, int, lowp> lowp_imat3x2; | |
typedef mat<3, 3, int, lowp> lowp_imat3x3; | |
typedef mat<3, 4, int, lowp> lowp_imat3x4; | |
typedef mat<4, 2, int, lowp> lowp_imat4x2; | |
typedef mat<4, 3, int, lowp> lowp_imat4x3; | |
typedef mat<4, 4, int, lowp> lowp_imat4x4; | |
typedef mat<2, 2, int, mediump> mediump_imat2x2; | |
typedef mat<2, 3, int, mediump> mediump_imat2x3; | |
typedef mat<2, 4, int, mediump> mediump_imat2x4; | |
typedef mat<3, 2, int, mediump> mediump_imat3x2; | |
typedef mat<3, 3, int, mediump> mediump_imat3x3; | |
typedef mat<3, 4, int, mediump> mediump_imat3x4; | |
typedef mat<4, 2, int, mediump> mediump_imat4x2; | |
typedef mat<4, 3, int, mediump> mediump_imat4x3; | |
typedef mat<4, 4, int, mediump> mediump_imat4x4; | |
typedef mat<2, 2, int, highp> highp_imat2x2; | |
typedef mat<2, 3, int, highp> highp_imat2x3; | |
typedef mat<2, 4, int, highp> highp_imat2x4; | |
typedef mat<3, 2, int, highp> highp_imat3x2; | |
typedef mat<3, 3, int, highp> highp_imat3x3; | |
typedef mat<3, 4, int, highp> highp_imat3x4; | |
typedef mat<4, 2, int, highp> highp_imat4x2; | |
typedef mat<4, 3, int, highp> highp_imat4x3; | |
typedef mat<4, 4, int, highp> highp_imat4x4; | |
typedef mat<2, 2, int, defaultp> imat2x2; | |
typedef mat<3, 2, int, defaultp> imat3x2; | |
typedef mat<4, 2, int, defaultp> imat4x2; | |
typedef mat<2, 3, int, defaultp> imat2x3; | |
typedef mat<3, 3, int, defaultp> imat3x3; | |
typedef mat<4, 3, int, defaultp> imat4x3; | |
typedef mat<2, 4, int, defaultp> imat2x4; | |
typedef mat<3, 4, int, defaultp> imat3x4; | |
typedef mat<4, 4, int, defaultp> imat4x4; | |
typedef mat<2, 2, int8, lowp> lowp_i8mat2x2; | |
typedef mat<2, 3, int8, lowp> lowp_i8mat2x3; | |
typedef mat<2, 4, int8, lowp> lowp_i8mat2x4; | |
typedef mat<3, 2, int8, lowp> lowp_i8mat3x2; | |
typedef mat<3, 3, int8, lowp> lowp_i8mat3x3; | |
typedef mat<3, 4, int8, lowp> lowp_i8mat3x4; | |
typedef mat<4, 2, int8, lowp> lowp_i8mat4x2; | |
typedef mat<4, 3, int8, lowp> lowp_i8mat4x3; | |
typedef mat<4, 4, int8, lowp> lowp_i8mat4x4; | |
typedef mat<2, 2, int8, mediump> mediump_i8mat2x2; | |
typedef mat<2, 3, int8, mediump> mediump_i8mat2x3; | |
typedef mat<2, 4, int8, mediump> mediump_i8mat2x4; | |
typedef mat<3, 2, int8, mediump> mediump_i8mat3x2; | |
typedef mat<3, 3, int8, mediump> mediump_i8mat3x3; | |
typedef mat<3, 4, int8, mediump> mediump_i8mat3x4; | |
typedef mat<4, 2, int8, mediump> mediump_i8mat4x2; | |
typedef mat<4, 3, int8, mediump> mediump_i8mat4x3; | |
typedef mat<4, 4, int8, mediump> mediump_i8mat4x4; | |
typedef mat<2, 2, int8, highp> highp_i8mat2x2; | |
typedef mat<2, 3, int8, highp> highp_i8mat2x3; | |
typedef mat<2, 4, int8, highp> highp_i8mat2x4; | |
typedef mat<3, 2, int8, highp> highp_i8mat3x2; | |
typedef mat<3, 3, int8, highp> highp_i8mat3x3; | |
typedef mat<3, 4, int8, highp> highp_i8mat3x4; | |
typedef mat<4, 2, int8, highp> highp_i8mat4x2; | |
typedef mat<4, 3, int8, highp> highp_i8mat4x3; | |
typedef mat<4, 4, int8, highp> highp_i8mat4x4; | |
typedef mat<2, 2, int8, defaultp> i8mat2x2; | |
typedef mat<3, 2, int8, defaultp> i8mat3x2; | |
typedef mat<4, 2, int8, defaultp> i8mat4x2; | |
typedef mat<2, 3, int8, defaultp> i8mat2x3; | |
typedef mat<3, 3, int8, defaultp> i8mat3x3; | |
typedef mat<4, 3, int8, defaultp> i8mat4x3; | |
typedef mat<2, 4, int8, defaultp> i8mat2x4; | |
typedef mat<3, 4, int8, defaultp> i8mat3x4; | |
typedef mat<4, 4, int8, defaultp> i8mat4x4; | |
typedef mat<2, 2, int16, lowp> lowp_i16mat2x2; | |
typedef mat<2, 3, int16, lowp> lowp_i16mat2x3; | |
typedef mat<2, 4, int16, lowp> lowp_i16mat2x4; | |
typedef mat<3, 2, int16, lowp> lowp_i16mat3x2; | |
typedef mat<3, 3, int16, lowp> lowp_i16mat3x3; | |
typedef mat<3, 4, int16, lowp> lowp_i16mat3x4; | |
typedef mat<4, 2, int16, lowp> lowp_i16mat4x2; | |
typedef mat<4, 3, int16, lowp> lowp_i16mat4x3; | |
typedef mat<4, 4, int16, lowp> lowp_i16mat4x4; | |
typedef mat<2, 2, int16, mediump> mediump_i16mat2x2; | |
typedef mat<2, 3, int16, mediump> mediump_i16mat2x3; | |
typedef mat<2, 4, int16, mediump> mediump_i16mat2x4; | |
typedef mat<3, 2, int16, mediump> mediump_i16mat3x2; | |
typedef mat<3, 3, int16, mediump> mediump_i16mat3x3; | |
typedef mat<3, 4, int16, mediump> mediump_i16mat3x4; | |
typedef mat<4, 2, int16, mediump> mediump_i16mat4x2; | |
typedef mat<4, 3, int16, mediump> mediump_i16mat4x3; | |
typedef mat<4, 4, int16, mediump> mediump_i16mat4x4; | |
typedef mat<2, 2, int16, highp> highp_i16mat2x2; | |
typedef mat<2, 3, int16, highp> highp_i16mat2x3; | |
typedef mat<2, 4, int16, highp> highp_i16mat2x4; | |
typedef mat<3, 2, int16, highp> highp_i16mat3x2; | |
typedef mat<3, 3, int16, highp> highp_i16mat3x3; | |
typedef mat<3, 4, int16, highp> highp_i16mat3x4; | |
typedef mat<4, 2, int16, highp> highp_i16mat4x2; | |
typedef mat<4, 3, int16, highp> highp_i16mat4x3; | |
typedef mat<4, 4, int16, highp> highp_i16mat4x4; | |
typedef mat<2, 2, int16, defaultp> i16mat2x2; | |
typedef mat<3, 2, int16, defaultp> i16mat3x2; | |
typedef mat<4, 2, int16, defaultp> i16mat4x2; | |
typedef mat<2, 3, int16, defaultp> i16mat2x3; | |
typedef mat<3, 3, int16, defaultp> i16mat3x3; | |
typedef mat<4, 3, int16, defaultp> i16mat4x3; | |
typedef mat<2, 4, int16, defaultp> i16mat2x4; | |
typedef mat<3, 4, int16, defaultp> i16mat3x4; | |
typedef mat<4, 4, int16, defaultp> i16mat4x4; | |
typedef mat<2, 2, int32, lowp> lowp_i32mat2x2; | |
typedef mat<2, 3, int32, lowp> lowp_i32mat2x3; | |
typedef mat<2, 4, int32, lowp> lowp_i32mat2x4; | |
typedef mat<3, 2, int32, lowp> lowp_i32mat3x2; | |
typedef mat<3, 3, int32, lowp> lowp_i32mat3x3; | |
typedef mat<3, 4, int32, lowp> lowp_i32mat3x4; | |
typedef mat<4, 2, int32, lowp> lowp_i32mat4x2; | |
typedef mat<4, 3, int32, lowp> lowp_i32mat4x3; | |
typedef mat<4, 4, int32, lowp> lowp_i32mat4x4; | |
typedef mat<2, 2, int32, mediump> mediump_i32mat2x2; | |
typedef mat<2, 3, int32, mediump> mediump_i32mat2x3; | |
typedef mat<2, 4, int32, mediump> mediump_i32mat2x4; | |
typedef mat<3, 2, int32, mediump> mediump_i32mat3x2; | |
typedef mat<3, 3, int32, mediump> mediump_i32mat3x3; | |
typedef mat<3, 4, int32, mediump> mediump_i32mat3x4; | |
typedef mat<4, 2, int32, mediump> mediump_i32mat4x2; | |
typedef mat<4, 3, int32, mediump> mediump_i32mat4x3; | |
typedef mat<4, 4, int32, mediump> mediump_i32mat4x4; | |
typedef mat<2, 2, int32, highp> highp_i32mat2x2; | |
typedef mat<2, 3, int32, highp> highp_i32mat2x3; | |
typedef mat<2, 4, int32, highp> highp_i32mat2x4; | |
typedef mat<3, 2, int32, highp> highp_i32mat3x2; | |
typedef mat<3, 3, int32, highp> highp_i32mat3x3; | |
typedef mat<3, 4, int32, highp> highp_i32mat3x4; | |
typedef mat<4, 2, int32, highp> highp_i32mat4x2; | |
typedef mat<4, 3, int32, highp> highp_i32mat4x3; | |
typedef mat<4, 4, int32, highp> highp_i32mat4x4; | |
typedef mat<2, 2, int32, defaultp> i32mat2x2; | |
typedef mat<3, 2, int32, defaultp> i32mat3x2; | |
typedef mat<4, 2, int32, defaultp> i32mat4x2; | |
typedef mat<2, 3, int32, defaultp> i32mat2x3; | |
typedef mat<3, 3, int32, defaultp> i32mat3x3; | |
typedef mat<4, 3, int32, defaultp> i32mat4x3; | |
typedef mat<2, 4, int32, defaultp> i32mat2x4; | |
typedef mat<3, 4, int32, defaultp> i32mat3x4; | |
typedef mat<4, 4, int32, defaultp> i32mat4x4; | |
typedef mat<2, 2, int64, lowp> lowp_i64mat2x2; | |
typedef mat<2, 3, int64, lowp> lowp_i64mat2x3; | |
typedef mat<2, 4, int64, lowp> lowp_i64mat2x4; | |
typedef mat<3, 2, int64, lowp> lowp_i64mat3x2; | |
typedef mat<3, 3, int64, lowp> lowp_i64mat3x3; | |
typedef mat<3, 4, int64, lowp> lowp_i64mat3x4; | |
typedef mat<4, 2, int64, lowp> lowp_i64mat4x2; | |
typedef mat<4, 3, int64, lowp> lowp_i64mat4x3; | |
typedef mat<4, 4, int64, lowp> lowp_i64mat4x4; | |
typedef mat<2, 2, int64, mediump> mediump_i64mat2x2; | |
typedef mat<2, 3, int64, mediump> mediump_i64mat2x3; | |
typedef mat<2, 4, int64, mediump> mediump_i64mat2x4; | |
typedef mat<3, 2, int64, mediump> mediump_i64mat3x2; | |
typedef mat<3, 3, int64, mediump> mediump_i64mat3x3; | |
typedef mat<3, 4, int64, mediump> mediump_i64mat3x4; | |
typedef mat<4, 2, int64, mediump> mediump_i64mat4x2; | |
typedef mat<4, 3, int64, mediump> mediump_i64mat4x3; | |
typedef mat<4, 4, int64, mediump> mediump_i64mat4x4; | |
typedef mat<2, 2, int64, highp> highp_i64mat2x2; | |
typedef mat<2, 3, int64, highp> highp_i64mat2x3; | |
typedef mat<2, 4, int64, highp> highp_i64mat2x4; | |
typedef mat<3, 2, int64, highp> highp_i64mat3x2; | |
typedef mat<3, 3, int64, highp> highp_i64mat3x3; | |
typedef mat<3, 4, int64, highp> highp_i64mat3x4; | |
typedef mat<4, 2, int64, highp> highp_i64mat4x2; | |
typedef mat<4, 3, int64, highp> highp_i64mat4x3; | |
typedef mat<4, 4, int64, highp> highp_i64mat4x4; | |
typedef mat<2, 2, int64, defaultp> i64mat2x2; | |
typedef mat<3, 2, int64, defaultp> i64mat3x2; | |
typedef mat<4, 2, int64, defaultp> i64mat4x2; | |
typedef mat<2, 3, int64, defaultp> i64mat2x3; | |
typedef mat<3, 3, int64, defaultp> i64mat3x3; | |
typedef mat<4, 3, int64, defaultp> i64mat4x3; | |
typedef mat<2, 4, int64, defaultp> i64mat2x4; | |
typedef mat<3, 4, int64, defaultp> i64mat3x4; | |
typedef mat<4, 4, int64, defaultp> i64mat4x4; | |
typedef mat<2, 2, uint, lowp> lowp_umat2x2; | |
typedef mat<2, 3, uint, lowp> lowp_umat2x3; | |
typedef mat<2, 4, uint, lowp> lowp_umat2x4; | |
typedef mat<3, 2, uint, lowp> lowp_umat3x2; | |
typedef mat<3, 3, uint, lowp> lowp_umat3x3; | |
typedef mat<3, 4, uint, lowp> lowp_umat3x4; | |
typedef mat<4, 2, uint, lowp> lowp_umat4x2; | |
typedef mat<4, 3, uint, lowp> lowp_umat4x3; | |
typedef mat<4, 4, uint, lowp> lowp_umat4x4; | |
typedef mat<2, 2, uint, mediump> mediump_umat2x2; | |
typedef mat<2, 3, uint, mediump> mediump_umat2x3; | |
typedef mat<2, 4, uint, mediump> mediump_umat2x4; | |
typedef mat<3, 2, uint, mediump> mediump_umat3x2; | |
typedef mat<3, 3, uint, mediump> mediump_umat3x3; | |
typedef mat<3, 4, uint, mediump> mediump_umat3x4; | |
typedef mat<4, 2, uint, mediump> mediump_umat4x2; | |
typedef mat<4, 3, uint, mediump> mediump_umat4x3; | |
typedef mat<4, 4, uint, mediump> mediump_umat4x4; | |
typedef mat<2, 2, uint, highp> highp_umat2x2; | |
typedef mat<2, 3, uint, highp> highp_umat2x3; | |
typedef mat<2, 4, uint, highp> highp_umat2x4; | |
typedef mat<3, 2, uint, highp> highp_umat3x2; | |
typedef mat<3, 3, uint, highp> highp_umat3x3; | |
typedef mat<3, 4, uint, highp> highp_umat3x4; | |
typedef mat<4, 2, uint, highp> highp_umat4x2; | |
typedef mat<4, 3, uint, highp> highp_umat4x3; | |
typedef mat<4, 4, uint, highp> highp_umat4x4; | |
typedef mat<2, 2, uint, defaultp> umat2x2; | |
typedef mat<3, 2, uint, defaultp> umat3x2; | |
typedef mat<4, 2, uint, defaultp> umat4x2; | |
typedef mat<2, 3, uint, defaultp> umat2x3; | |
typedef mat<3, 3, uint, defaultp> umat3x3; | |
typedef mat<4, 3, uint, defaultp> umat4x3; | |
typedef mat<2, 4, uint, defaultp> umat2x4; | |
typedef mat<3, 4, uint, defaultp> umat3x4; | |
typedef mat<4, 4, uint, defaultp> umat4x4; | |
typedef mat<2, 2, uint8, lowp> lowp_u8mat2x2; | |
typedef mat<2, 3, uint8, lowp> lowp_u8mat2x3; | |
typedef mat<2, 4, uint8, lowp> lowp_u8mat2x4; | |
typedef mat<3, 2, uint8, lowp> lowp_u8mat3x2; | |
typedef mat<3, 3, uint8, lowp> lowp_u8mat3x3; | |
typedef mat<3, 4, uint8, lowp> lowp_u8mat3x4; | |
typedef mat<4, 2, uint8, lowp> lowp_u8mat4x2; | |
typedef mat<4, 3, uint8, lowp> lowp_u8mat4x3; | |
typedef mat<4, 4, uint8, lowp> lowp_u8mat4x4; | |
typedef mat<2, 2, uint8, mediump> mediump_u8mat2x2; | |
typedef mat<2, 3, uint8, mediump> mediump_u8mat2x3; | |
typedef mat<2, 4, uint8, mediump> mediump_u8mat2x4; | |
typedef mat<3, 2, uint8, mediump> mediump_u8mat3x2; | |
typedef mat<3, 3, uint8, mediump> mediump_u8mat3x3; | |
typedef mat<3, 4, uint8, mediump> mediump_u8mat3x4; | |
typedef mat<4, 2, uint8, mediump> mediump_u8mat4x2; | |
typedef mat<4, 3, uint8, mediump> mediump_u8mat4x3; | |
typedef mat<4, 4, uint8, mediump> mediump_u8mat4x4; | |
typedef mat<2, 2, uint8, highp> highp_u8mat2x2; | |
typedef mat<2, 3, uint8, highp> highp_u8mat2x3; | |
typedef mat<2, 4, uint8, highp> highp_u8mat2x4; | |
typedef mat<3, 2, uint8, highp> highp_u8mat3x2; | |
typedef mat<3, 3, uint8, highp> highp_u8mat3x3; | |
typedef mat<3, 4, uint8, highp> highp_u8mat3x4; | |
typedef mat<4, 2, uint8, highp> highp_u8mat4x2; | |
typedef mat<4, 3, uint8, highp> highp_u8mat4x3; | |
typedef mat<4, 4, uint8, highp> highp_u8mat4x4; | |
typedef mat<2, 2, uint8, defaultp> u8mat2x2; | |
typedef mat<3, 2, uint8, defaultp> u8mat3x2; | |
typedef mat<4, 2, uint8, defaultp> u8mat4x2; | |
typedef mat<2, 3, uint8, defaultp> u8mat2x3; | |
typedef mat<3, 3, uint8, defaultp> u8mat3x3; | |
typedef mat<4, 3, uint8, defaultp> u8mat4x3; | |
typedef mat<2, 4, uint8, defaultp> u8mat2x4; | |
typedef mat<3, 4, uint8, defaultp> u8mat3x4; | |
typedef mat<4, 4, uint8, defaultp> u8mat4x4; | |
typedef mat<2, 2, uint16, lowp> lowp_u16mat2x2; | |
typedef mat<2, 3, uint16, lowp> lowp_u16mat2x3; | |
typedef mat<2, 4, uint16, lowp> lowp_u16mat2x4; | |
typedef mat<3, 2, uint16, lowp> lowp_u16mat3x2; | |
typedef mat<3, 3, uint16, lowp> lowp_u16mat3x3; | |
typedef mat<3, 4, uint16, lowp> lowp_u16mat3x4; | |
typedef mat<4, 2, uint16, lowp> lowp_u16mat4x2; | |
typedef mat<4, 3, uint16, lowp> lowp_u16mat4x3; | |
typedef mat<4, 4, uint16, lowp> lowp_u16mat4x4; | |
typedef mat<2, 2, uint16, mediump> mediump_u16mat2x2; | |
typedef mat<2, 3, uint16, mediump> mediump_u16mat2x3; | |
typedef mat<2, 4, uint16, mediump> mediump_u16mat2x4; | |
typedef mat<3, 2, uint16, mediump> mediump_u16mat3x2; | |
typedef mat<3, 3, uint16, mediump> mediump_u16mat3x3; | |
typedef mat<3, 4, uint16, mediump> mediump_u16mat3x4; | |
typedef mat<4, 2, uint16, mediump> mediump_u16mat4x2; | |
typedef mat<4, 3, uint16, mediump> mediump_u16mat4x3; | |
typedef mat<4, 4, uint16, mediump> mediump_u16mat4x4; | |
typedef mat<2, 2, uint16, highp> highp_u16mat2x2; | |
typedef mat<2, 3, uint16, highp> highp_u16mat2x3; | |
typedef mat<2, 4, uint16, highp> highp_u16mat2x4; | |
typedef mat<3, 2, uint16, highp> highp_u16mat3x2; | |
typedef mat<3, 3, uint16, highp> highp_u16mat3x3; | |
typedef mat<3, 4, uint16, highp> highp_u16mat3x4; | |
typedef mat<4, 2, uint16, highp> highp_u16mat4x2; | |
typedef mat<4, 3, uint16, highp> highp_u16mat4x3; | |
typedef mat<4, 4, uint16, highp> highp_u16mat4x4; | |
typedef mat<2, 2, uint16, defaultp> u16mat2x2; | |
typedef mat<3, 2, uint16, defaultp> u16mat3x2; | |
typedef mat<4, 2, uint16, defaultp> u16mat4x2; | |
typedef mat<2, 3, uint16, defaultp> u16mat2x3; | |
typedef mat<3, 3, uint16, defaultp> u16mat3x3; | |
typedef mat<4, 3, uint16, defaultp> u16mat4x3; | |
typedef mat<2, 4, uint16, defaultp> u16mat2x4; | |
typedef mat<3, 4, uint16, defaultp> u16mat3x4; | |
typedef mat<4, 4, uint16, defaultp> u16mat4x4; | |
typedef mat<2, 2, uint32, lowp> lowp_u32mat2x2; | |
typedef mat<2, 3, uint32, lowp> lowp_u32mat2x3; | |
typedef mat<2, 4, uint32, lowp> lowp_u32mat2x4; | |
typedef mat<3, 2, uint32, lowp> lowp_u32mat3x2; | |
typedef mat<3, 3, uint32, lowp> lowp_u32mat3x3; | |
typedef mat<3, 4, uint32, lowp> lowp_u32mat3x4; | |
typedef mat<4, 2, uint32, lowp> lowp_u32mat4x2; | |
typedef mat<4, 3, uint32, lowp> lowp_u32mat4x3; | |
typedef mat<4, 4, uint32, lowp> lowp_u32mat4x4; | |
typedef mat<2, 2, uint32, mediump> mediump_u32mat2x2; | |
typedef mat<2, 3, uint32, mediump> mediump_u32mat2x3; | |
typedef mat<2, 4, uint32, mediump> mediump_u32mat2x4; | |
typedef mat<3, 2, uint32, mediump> mediump_u32mat3x2; | |
typedef mat<3, 3, uint32, mediump> mediump_u32mat3x3; | |
typedef mat<3, 4, uint32, mediump> mediump_u32mat3x4; | |
typedef mat<4, 2, uint32, mediump> mediump_u32mat4x2; | |
typedef mat<4, 3, uint32, mediump> mediump_u32mat4x3; | |
typedef mat<4, 4, uint32, mediump> mediump_u32mat4x4; | |
typedef mat<2, 2, uint32, highp> highp_u32mat2x2; | |
typedef mat<2, 3, uint32, highp> highp_u32mat2x3; | |
typedef mat<2, 4, uint32, highp> highp_u32mat2x4; | |
typedef mat<3, 2, uint32, highp> highp_u32mat3x2; | |
typedef mat<3, 3, uint32, highp> highp_u32mat3x3; | |
typedef mat<3, 4, uint32, highp> highp_u32mat3x4; | |
typedef mat<4, 2, uint32, highp> highp_u32mat4x2; | |
typedef mat<4, 3, uint32, highp> highp_u32mat4x3; | |
typedef mat<4, 4, uint32, highp> highp_u32mat4x4; | |
typedef mat<2, 2, uint32, defaultp> u32mat2x2; | |
typedef mat<3, 2, uint32, defaultp> u32mat3x2; | |
typedef mat<4, 2, uint32, defaultp> u32mat4x2; | |
typedef mat<2, 3, uint32, defaultp> u32mat2x3; | |
typedef mat<3, 3, uint32, defaultp> u32mat3x3; | |
typedef mat<4, 3, uint32, defaultp> u32mat4x3; | |
typedef mat<2, 4, uint32, defaultp> u32mat2x4; | |
typedef mat<3, 4, uint32, defaultp> u32mat3x4; | |
typedef mat<4, 4, uint32, defaultp> u32mat4x4; | |
typedef mat<2, 2, uint64, lowp> lowp_u64mat2x2; | |
typedef mat<2, 3, uint64, lowp> lowp_u64mat2x3; | |
typedef mat<2, 4, uint64, lowp> lowp_u64mat2x4; | |
typedef mat<3, 2, uint64, lowp> lowp_u64mat3x2; | |
typedef mat<3, 3, uint64, lowp> lowp_u64mat3x3; | |
typedef mat<3, 4, uint64, lowp> lowp_u64mat3x4; | |
typedef mat<4, 2, uint64, lowp> lowp_u64mat4x2; | |
typedef mat<4, 3, uint64, lowp> lowp_u64mat4x3; | |
typedef mat<4, 4, uint64, lowp> lowp_u64mat4x4; | |
typedef mat<2, 2, uint64, mediump> mediump_u64mat2x2; | |
typedef mat<2, 3, uint64, mediump> mediump_u64mat2x3; | |
typedef mat<2, 4, uint64, mediump> mediump_u64mat2x4; | |
typedef mat<3, 2, uint64, mediump> mediump_u64mat3x2; | |
typedef mat<3, 3, uint64, mediump> mediump_u64mat3x3; | |
typedef mat<3, 4, uint64, mediump> mediump_u64mat3x4; | |
typedef mat<4, 2, uint64, mediump> mediump_u64mat4x2; | |
typedef mat<4, 3, uint64, mediump> mediump_u64mat4x3; | |
typedef mat<4, 4, uint64, mediump> mediump_u64mat4x4; | |
typedef mat<2, 2, uint64, highp> highp_u64mat2x2; | |
typedef mat<2, 3, uint64, highp> highp_u64mat2x3; | |
typedef mat<2, 4, uint64, highp> highp_u64mat2x4; | |
typedef mat<3, 2, uint64, highp> highp_u64mat3x2; | |
typedef mat<3, 3, uint64, highp> highp_u64mat3x3; | |
typedef mat<3, 4, uint64, highp> highp_u64mat3x4; | |
typedef mat<4, 2, uint64, highp> highp_u64mat4x2; | |
typedef mat<4, 3, uint64, highp> highp_u64mat4x3; | |
typedef mat<4, 4, uint64, highp> highp_u64mat4x4; | |
typedef mat<2, 2, uint64, defaultp> u64mat2x2; | |
typedef mat<3, 2, uint64, defaultp> u64mat3x2; | |
typedef mat<4, 2, uint64, defaultp> u64mat4x2; | |
typedef mat<2, 3, uint64, defaultp> u64mat2x3; | |
typedef mat<3, 3, uint64, defaultp> u64mat3x3; | |
typedef mat<4, 3, uint64, defaultp> u64mat4x3; | |
typedef mat<2, 4, uint64, defaultp> u64mat2x4; | |
typedef mat<3, 4, uint64, defaultp> u64mat3x4; | |
typedef mat<4, 4, uint64, defaultp> u64mat4x4; | |
typedef qua<float, lowp> lowp_quat; | |
typedef qua<float, mediump> mediump_quat; | |
typedef qua<float, highp> highp_quat; | |
typedef qua<float, defaultp> quat; | |
typedef qua<float, lowp> lowp_fquat; | |
typedef qua<float, mediump> mediump_fquat; | |
typedef qua<float, highp> highp_fquat; | |
typedef qua<float, defaultp> fquat; | |
typedef qua<f32, lowp> lowp_f32quat; | |
typedef qua<f32, mediump> mediump_f32quat; | |
typedef qua<f32, highp> highp_f32quat; | |
typedef qua<f32, defaultp> f32quat; | |
typedef qua<double, lowp> lowp_dquat; | |
typedef qua<double, mediump> mediump_dquat; | |
typedef qua<double, highp> highp_dquat; | |
typedef qua<double, defaultp> dquat; | |
typedef qua<f64, lowp> lowp_f64quat; | |
typedef qua<f64, mediump> mediump_f64quat; | |
typedef qua<f64, highp> highp_f64quat; | |
typedef qua<f64, defaultp> f64quat; | |
} | |
# 9854 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
typedef vec<2, bool, defaultp> bvec2; | |
} | |
namespace glm | |
{ | |
typedef vec<2, bool, highp> highp_bvec2; | |
typedef vec<2, bool, mediump> mediump_bvec2; | |
typedef vec<2, bool, lowp> lowp_bvec2; | |
} | |
namespace glm | |
{ | |
typedef vec<2, float, defaultp> vec2; | |
} | |
namespace glm | |
{ | |
typedef vec<2, float, highp> highp_vec2; | |
typedef vec<2, float, mediump> mediump_vec2; | |
typedef vec<2, float, lowp> lowp_vec2; | |
} | |
namespace glm | |
{ | |
typedef vec<2, double, defaultp> dvec2; | |
} | |
namespace glm | |
{ | |
typedef vec<2, double, highp> highp_dvec2; | |
typedef vec<2, double, mediump> mediump_dvec2; | |
typedef vec<2, double, lowp> lowp_dvec2; | |
} | |
namespace glm | |
{ | |
typedef vec<2, int, defaultp> ivec2; | |
} | |
# 10028 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 10029 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_scalar_int_sized extension included") | |
# 10029 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm{ | |
namespace detail | |
{ | |
# if GLM_HAS_EXTENDED_INTEGER_TYPE | |
typedef std::int8_t int8; | |
typedef std::int16_t int16; | |
typedef std::int32_t int32; | |
# else | |
typedef signed char int8; | |
typedef signed short int16; | |
typedef signed int int32; | |
#endif | |
template<> | |
struct is_int<int8> | |
{ | |
enum test {value = ~0}; | |
}; | |
template<> | |
struct is_int<int16> | |
{ | |
enum test {value = ~0}; | |
}; | |
template<> | |
struct is_int<int64> | |
{ | |
enum test {value = ~0}; | |
}; | |
} | |
typedef detail::int8 int8; | |
typedef detail::int16 int16; | |
typedef detail::int32 int32; | |
typedef detail::int64 int64; | |
} | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 10084 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_int2_sized extension included") | |
# 10084 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<2, int8, defaultp> i8vec2; | |
typedef vec<2, int16, defaultp> i16vec2; | |
typedef vec<2, int32, defaultp> i32vec2; | |
typedef vec<2, int64, defaultp> i64vec2; | |
} | |
namespace glm | |
{ | |
typedef vec<2, unsigned int, defaultp> uvec2; | |
} | |
# 10157 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 10158 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_scalar_uint_sized extension included") | |
# 10158 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm{ | |
namespace detail | |
{ | |
# if GLM_HAS_EXTENDED_INTEGER_TYPE | |
typedef std::uint8_t uint8; | |
typedef std::uint16_t uint16; | |
typedef std::uint32_t uint32; | |
# else | |
typedef unsigned char uint8; | |
typedef unsigned short uint16; | |
typedef unsigned int uint32; | |
#endif | |
template<> | |
struct is_int<uint8> | |
{ | |
enum test {value = ~0}; | |
}; | |
template<> | |
struct is_int<uint16> | |
{ | |
enum test {value = ~0}; | |
}; | |
template<> | |
struct is_int<uint64> | |
{ | |
enum test {value = ~0}; | |
}; | |
} | |
typedef detail::uint8 uint8; | |
typedef detail::uint16 uint16; | |
typedef detail::uint32 uint32; | |
typedef detail::uint64 uint64; | |
} | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 10213 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_uint2_sized extension included") | |
# 10213 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<2, uint8, defaultp> u8vec2; | |
typedef vec<2, uint16, defaultp> u16vec2; | |
typedef vec<2, uint32, defaultp> u32vec2; | |
typedef vec<2, uint64, defaultp> u64vec2; | |
} | |
namespace glm | |
{ | |
typedef vec<3, bool, defaultp> bvec3; | |
} | |
namespace glm | |
{ | |
typedef vec<3, bool, highp> highp_bvec3; | |
typedef vec<3, bool, mediump> mediump_bvec3; | |
typedef vec<3, bool, lowp> lowp_bvec3; | |
} | |
namespace glm | |
{ | |
typedef vec<3, float, defaultp> vec3; | |
} | |
namespace glm | |
{ | |
typedef vec<3, float, highp> highp_vec3; | |
typedef vec<3, float, mediump> mediump_vec3; | |
typedef vec<3, float, lowp> lowp_vec3; | |
} | |
namespace glm | |
{ | |
typedef vec<3, double, defaultp> dvec3; | |
} | |
namespace glm | |
{ | |
# 10366 "glm-amalgamated/glm.h" | |
typedef vec<3, double, highp> highp_dvec3; | |
typedef vec<3, double, mediump> mediump_dvec3; | |
typedef vec<3, double, lowp> lowp_dvec3; | |
} | |
namespace glm | |
{ | |
typedef vec<3, int, defaultp> ivec3; | |
} | |
# 10414 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 10415 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_int3_sized extension included") | |
# 10415 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<3, int8, defaultp> i8vec3; | |
typedef vec<3, int16, defaultp> i16vec3; | |
typedef vec<3, int32, defaultp> i32vec3; | |
typedef vec<3, int64, defaultp> i64vec3; | |
} | |
namespace glm | |
{ | |
typedef vec<3, unsigned int, defaultp> uvec3; | |
} | |
# 10475 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 10476 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_uint3_sized extension included") | |
# 10476 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<3, uint8, defaultp> u8vec3; | |
typedef vec<3, uint16, defaultp> u16vec3; | |
typedef vec<3, uint32, defaultp> u32vec3; | |
typedef vec<3, uint64, defaultp> u64vec3; | |
} | |
namespace glm | |
{ | |
typedef vec<4, bool, defaultp> bvec4; | |
} | |
namespace glm | |
{ | |
typedef vec<4, bool, highp> highp_bvec4; | |
typedef vec<4, bool, mediump> mediump_bvec4; | |
typedef vec<4, bool, lowp> lowp_bvec4; | |
} | |
namespace glm | |
{ | |
typedef vec<4, float, defaultp> vec4; | |
} | |
namespace glm | |
{ | |
typedef vec<4, float, highp> highp_vec4; | |
typedef vec<4, float, mediump> mediump_vec4; | |
typedef vec<4, float, lowp> lowp_vec4; | |
} | |
namespace glm | |
{ | |
typedef vec<4, double, defaultp> dvec4; | |
} | |
namespace glm | |
{ | |
# 10629 "glm-amalgamated/glm.h" | |
typedef vec<4, double, highp> highp_dvec4; | |
typedef vec<4, double, mediump> mediump_dvec4; | |
typedef vec<4, double, lowp> lowp_dvec4; | |
} | |
namespace glm | |
{ | |
typedef vec<4, int, defaultp> ivec4; | |
} | |
# 10677 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 10678 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_int4_sized extension included") | |
# 10678 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<4, int8, defaultp> i8vec4; | |
typedef vec<4, int16, defaultp> i16vec4; | |
typedef vec<4, int32, defaultp> i32vec4; | |
typedef vec<4, int64, defaultp> i64vec4; | |
} | |
namespace glm | |
{ | |
typedef vec<4, unsigned int, defaultp> uvec4; | |
} | |
# 10738 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 10739 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_uint4_sized extension included") | |
# 10739 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<4, uint8, defaultp> u8vec4; | |
typedef vec<4, uint16, defaultp> u16vec4; | |
typedef vec<4, uint32, defaultp> u32vec4; | |
typedef vec<4, uint64, defaultp> u64vec4; | |
} | |
# 10780 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
struct mat<2, 2, T, Q> | |
{ | |
typedef vec<2, T, Q> col_type; | |
typedef vec<2, T, Q> row_type; | |
typedef mat<2, 2, T, Q> type; | |
typedef mat<2, 2, T, Q> transpose_type; | |
typedef T value_type; | |
private: | |
col_type value[2]; | |
public: | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } | |
GLM_FUNC_DECL col_type & operator[](length_type i); | |
GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 2, T, P> const& m); | |
GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
T const& x1, T const& y1, | |
T const& x2, T const& y2); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
col_type const& v1, | |
col_type const& v2); | |
template<typename U, typename V, typename M, typename N> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
U const& x1, V const& y1, | |
M const& x2, N const& y2); | |
template<typename U, typename V> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
vec<2, U, Q> const& v1, | |
vec<2, V, Q> const& v2); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, U, P> const& m); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 2, T, Q> & operator=(mat<2, 2, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(mat<2, 2, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(mat<2, 2, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(mat<2, 2, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(mat<2, 2, U, Q> const& m); | |
GLM_FUNC_DECL mat<2, 2, T, Q> & operator++ (); | |
GLM_FUNC_DECL mat<2, 2, T, Q> & operator-- (); | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator++(int); | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator--(int); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator*(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator*(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); | |
} | |
#ifndef GLM_EXTERNAL_TEMPLATE | |
# 10970 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
struct mat<2, 3, T, Q> | |
{ | |
typedef vec<3, T, Q> col_type; | |
typedef vec<2, T, Q> row_type; | |
typedef mat<2, 3, T, Q> type; | |
typedef mat<3, 2, T, Q> transpose_type; | |
typedef T value_type; | |
private: | |
col_type value[2]; | |
public: | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } | |
GLM_FUNC_DECL col_type & operator[](length_type i); | |
GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 3, T, P> const& m); | |
GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
T x0, T y0, T z0, | |
T x1, T y1, T z1); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
col_type const& v0, | |
col_type const& v1); | |
template<typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
X1 x1, Y1 y1, Z1 z1, | |
X2 x2, Y2 y2, Z2 z2); | |
template<typename U, typename V> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
vec<3, U, Q> const& v1, | |
vec<3, V, Q> const& v2); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, U, P> const& m); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 3, T, Q> & operator=(mat<2, 3, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(mat<2, 3, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(mat<2, 3, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 3, T, Q> & operator*=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 3, T, Q> & operator/=(U s); | |
GLM_FUNC_DECL mat<2, 3, T, Q> & operator++ (); | |
GLM_FUNC_DECL mat<2, 3, T, Q> & operator-- (); | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator++(int); | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator--(int); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<2, 3, T, Q>::col_type operator*(mat<2, 3, T, Q> const& m, typename mat<2, 3, T, Q>::row_type const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<2, 3, T, Q>::row_type operator*(typename mat<2, 3, T, Q>::col_type const& v, mat<2, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); | |
} | |
#ifndef GLM_EXTERNAL_TEMPLATE | |
namespace glm | |
{ | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat() | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST | |
: value{col_type(1, 0, 0), col_type(0, 1, 0)} | |
# endif | |
{ | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION | |
this->value[0] = col_type(1, 0, 0); | |
this->value[1] = col_type(0, 1, 0); | |
# endif | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, T, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{m.value[0], m.value[1]} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = m.value[0]; | |
this->value[1] = m.value[1]; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(T scalar) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(scalar, 0, 0), col_type(0, scalar, 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(scalar, 0, 0); | |
this->value[1] = col_type(0, scalar, 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat | |
( | |
T x0, T y0, T z0, | |
T x1, T y1, T z1 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(x0, y0, z0), col_type(x1, y1, z1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(x0, y0, z0); | |
this->value[1] = col_type(x1, y1, z1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(col_type const& v0, col_type const& v1) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v0), col_type(v1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(v0); | |
this->value[1] = col_type(v1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template< | |
typename X1, typename Y1, typename Z1, | |
typename X2, typename Y2, typename Z2> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat | |
( | |
X1 x1, Y1 y1, Z1 z1, | |
X2 x2, Y2 y2, Z2 z2 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(x1, y1, z1), col_type(x2, y2, z2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(x1, y1, z1); | |
this->value[1] = col_type(x2, y2, z2); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename V1, typename V2> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v1), col_type(v2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(v1); | |
this->value[1] = col_type(v2); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, U, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type & mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 3, T, Q>::col_type const& mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) const | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator=(mat<2, 3, U, Q> const& m) | |
{ | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator+=(U s) | |
{ | |
this->value[0] += s; | |
this->value[1] += s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator+=(mat<2, 3, U, Q> const& m) | |
{ | |
this->value[0] += m[0]; | |
this->value[1] += m[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(U s) | |
{ | |
this->value[0] -= s; | |
this->value[1] -= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(mat<2, 3, U, Q> const& m) | |
{ | |
this->value[0] -= m[0]; | |
this->value[1] -= m[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator*=(U s) | |
{ | |
this->value[0] *= s; | |
this->value[1] *= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator/=(U s) | |
{ | |
this->value[0] /= s; | |
this->value[1] /= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator++() | |
{ | |
++this->value[0]; | |
++this->value[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator--() | |
{ | |
--this->value[0]; | |
--this->value[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator++(int) | |
{ | |
mat<2, 3, T, Q> Result(*this); | |
++*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator--(int) | |
{ | |
mat<2, 3, T, Q> Result(*this); | |
--*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m) | |
{ | |
return m; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m) | |
{ | |
return mat<2, 3, T, Q>( | |
-m[0], | |
-m[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar) | |
{ | |
return mat<2, 3, T, Q>( | |
m[0] + scalar, | |
m[1] + scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) | |
{ | |
return mat<2, 3, T, Q>( | |
m1[0] + m2[0], | |
m1[1] + m2[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar) | |
{ | |
return mat<2, 3, T, Q>( | |
m[0] - scalar, | |
m[1] - scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) | |
{ | |
return mat<2, 3, T, Q>( | |
m1[0] - m2[0], | |
m1[1] - m2[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar) | |
{ | |
return mat<2, 3, T, Q>( | |
m[0] * scalar, | |
m[1] * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m) | |
{ | |
return mat<2, 3, T, Q>( | |
m[0] * scalar, | |
m[1] * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type operator* | |
( | |
mat<2, 3, T, Q> const& m, | |
typename mat<2, 3, T, Q>::row_type const& v) | |
{ | |
return typename mat<2, 3, T, Q>::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, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::row_type operator* | |
( | |
typename mat<2, 3, T, Q>::col_type const& v, | |
mat<2, 3, T, Q> const& m) | |
{ | |
return typename mat<2, 3, T, Q>::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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2) | |
{ | |
return mat<2, 3, T, Q>( | |
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][2] * m2[0][0] + m1[1][2] * 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], | |
m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2) | |
{ | |
T SrcA00 = m1[0][0]; | |
T SrcA01 = m1[0][1]; | |
T SrcA02 = m1[0][2]; | |
T SrcA10 = m1[1][0]; | |
T SrcA11 = m1[1][1]; | |
T SrcA12 = m1[1][2]; | |
T SrcB00 = m2[0][0]; | |
T SrcB01 = m2[0][1]; | |
T SrcB10 = m2[1][0]; | |
T SrcB11 = m2[1][1]; | |
T SrcB20 = m2[2][0]; | |
T SrcB21 = m2[2][1]; | |
mat<3, 3, T, Q> Result; | |
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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2) | |
{ | |
return mat<4, 3, T, Q>( | |
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][2] * m2[0][0] + m1[1][2] * 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], | |
m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], | |
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], | |
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], | |
m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1], | |
m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1], | |
m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1], | |
m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar) | |
{ | |
return mat<2, 3, T, Q>( | |
m[0] / scalar, | |
m[1] / scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m) | |
{ | |
return mat<2, 3, T, Q>( | |
scalar / m[0], | |
scalar / m[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) | |
{ | |
return (m1[0] == m2[0]) && (m1[1] == m2[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) | |
{ | |
return (m1[0] != m2[0]) || (m1[1] != m2[1]); | |
} | |
} | |
#endif | |
namespace glm | |
{ | |
typedef mat<2, 3, double, defaultp> dmat2x3; | |
} | |
namespace glm | |
{ | |
typedef mat<2, 3, double, lowp> lowp_dmat2x3; | |
typedef mat<2, 3, double, mediump> mediump_dmat2x3; | |
typedef mat<2, 3, double, highp> highp_dmat2x3; | |
} | |
namespace glm | |
{ | |
typedef mat<2, 3, float, defaultp> mat2x3; | |
} | |
namespace glm | |
{ | |
typedef mat<2, 3, float, lowp> lowp_mat2x3; | |
typedef mat<2, 3, float, mediump> mediump_mat2x3; | |
typedef mat<2, 3, float, highp> highp_mat2x3; | |
} | |
# 11726 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
struct mat<2, 4, T, Q> | |
{ | |
typedef vec<4, T, Q> col_type; | |
typedef vec<2, T, Q> row_type; | |
typedef mat<2, 4, T, Q> type; | |
typedef mat<4, 2, T, Q> transpose_type; | |
typedef T value_type; | |
private: | |
col_type value[2]; | |
public: | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } | |
GLM_FUNC_DECL col_type & operator[](length_type i); | |
GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 4, T, P> const& m); | |
GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
T x0, T y0, T z0, T w0, | |
T x1, T y1, T z1, T w1); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
col_type const& v0, | |
col_type const& v1); | |
template< | |
typename X1, typename Y1, typename Z1, typename W1, | |
typename X2, typename Y2, typename Z2, typename W2> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
X1 x1, Y1 y1, Z1 z1, W1 w1, | |
X2 x2, Y2 y2, Z2 z2, W2 w2); | |
template<typename U, typename V> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
vec<4, U, Q> const& v1, | |
vec<4, V, Q> const& v2); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, U, P> const& m); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 4, T, Q> & operator=(mat<2, 4, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(mat<2, 4, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(mat<2, 4, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 4, T, Q> & operator*=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<2, 4, T, Q> & operator/=(U s); | |
GLM_FUNC_DECL mat<2, 4, T, Q> & operator++ (); | |
GLM_FUNC_DECL mat<2, 4, T, Q> & operator-- (); | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator++(int); | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator--(int); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); | |
} | |
#ifndef GLM_EXTERNAL_TEMPLATE | |
namespace glm | |
{ | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat() | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST | |
: value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0)} | |
# endif | |
{ | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION | |
this->value[0] = col_type(1, 0, 0, 0); | |
this->value[1] = col_type(0, 1, 0, 0); | |
# endif | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, T, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{m[0], m[1]} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(T s) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(s, 0, 0, 0); | |
this->value[1] = col_type(0, s, 0, 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat | |
( | |
T x0, T y0, T z0, T w0, | |
T x1, T y1, T z1, T w1 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(x0, y0, z0, w0), col_type(x1, y1, z1, w1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(x0, y0, z0, w0); | |
this->value[1] = col_type(x1, y1, z1, w1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(col_type const& v0, col_type const& v1) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v0), col_type(v1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = v0; | |
this->value[1] = v1; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template< | |
typename X1, typename Y1, typename Z1, typename W1, | |
typename X2, typename Y2, typename Z2, typename W2> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat | |
( | |
X1 x1, Y1 y1, Z1 z1, W1 w1, | |
X2 x2, Y2 y2, Z2 z2, W2 w2 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{ | |
col_type(x1, y1, z1, w1), | |
col_type(x2, y2, z2, w2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(x1, y1, z1, w1); | |
this->value[1] = col_type(x2, y2, z2, w2); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename V1, typename V2> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v1), col_type(v2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(v1); | |
this->value[1] = col_type(v2); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, U, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0, 0); | |
this->value[1] = col_type(m[1], 0, 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0, 0); | |
this->value[1] = col_type(m[1], 0, 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0, 0); | |
this->value[1] = col_type(m[1], 0, 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type & mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 4, T, Q>::col_type const& mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) const | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator=(mat<2, 4, U, Q> const& m) | |
{ | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(U s) | |
{ | |
this->value[0] += s; | |
this->value[1] += s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(mat<2, 4, U, Q> const& m) | |
{ | |
this->value[0] += m[0]; | |
this->value[1] += m[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(U s) | |
{ | |
this->value[0] -= s; | |
this->value[1] -= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(mat<2, 4, U, Q> const& m) | |
{ | |
this->value[0] -= m[0]; | |
this->value[1] -= m[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator*=(U s) | |
{ | |
this->value[0] *= s; | |
this->value[1] *= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> & mat<2, 4, T, Q>::operator/=(U s) | |
{ | |
this->value[0] /= s; | |
this->value[1] /= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator++() | |
{ | |
++this->value[0]; | |
++this->value[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator--() | |
{ | |
--this->value[0]; | |
--this->value[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator++(int) | |
{ | |
mat<2, 4, T, Q> Result(*this); | |
++*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator--(int) | |
{ | |
mat<2, 4, T, Q> Result(*this); | |
--*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m) | |
{ | |
return m; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m) | |
{ | |
return mat<2, 4, T, Q>( | |
-m[0], | |
-m[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar) | |
{ | |
return mat<2, 4, T, Q>( | |
m[0] + scalar, | |
m[1] + scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) | |
{ | |
return mat<2, 4, T, Q>( | |
m1[0] + m2[0], | |
m1[1] + m2[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar) | |
{ | |
return mat<2, 4, T, Q>( | |
m[0] - scalar, | |
m[1] - scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) | |
{ | |
return mat<2, 4, T, Q>( | |
m1[0] - m2[0], | |
m1[1] - m2[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar) | |
{ | |
return mat<2, 4, T, Q>( | |
m[0] * scalar, | |
m[1] * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m) | |
{ | |
return mat<2, 4, T, Q>( | |
m[0] * scalar, | |
m[1] * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v) | |
{ | |
return typename mat<2, 4, T, Q>::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); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m) | |
{ | |
return typename mat<2, 4, T, Q>::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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2) | |
{ | |
T SrcA00 = m1[0][0]; | |
T SrcA01 = m1[0][1]; | |
T SrcA02 = m1[0][2]; | |
T SrcA03 = m1[0][3]; | |
T SrcA10 = m1[1][0]; | |
T SrcA11 = m1[1][1]; | |
T SrcA12 = m1[1][2]; | |
T SrcA13 = m1[1][3]; | |
T SrcB00 = m2[0][0]; | |
T SrcB01 = m2[0][1]; | |
T SrcB10 = m2[1][0]; | |
T SrcB11 = m2[1][1]; | |
T SrcB20 = m2[2][0]; | |
T SrcB21 = m2[2][1]; | |
T SrcB30 = m2[3][0]; | |
T SrcB31 = m2[3][1]; | |
mat<4, 4, T, Q> Result; | |
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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2) | |
{ | |
return mat<2, 4, T, Q>( | |
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][2] * m2[0][0] + m1[1][2] * m2[0][1], | |
m1[0][3] * m2[0][0] + m1[1][3] * 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], | |
m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], | |
m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2) | |
{ | |
return mat<3, 4, T, Q>( | |
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][2] * m2[0][0] + m1[1][2] * m2[0][1], | |
m1[0][3] * m2[0][0] + m1[1][3] * 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], | |
m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], | |
m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1], | |
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], | |
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], | |
m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1], | |
m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar) | |
{ | |
return mat<2, 4, T, Q>( | |
m[0] / scalar, | |
m[1] / scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m) | |
{ | |
return mat<2, 4, T, Q>( | |
scalar / m[0], | |
scalar / m[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) | |
{ | |
return (m1[0] == m2[0]) && (m1[1] == m2[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) | |
{ | |
return (m1[0] != m2[0]) || (m1[1] != m2[1]); | |
} | |
} | |
#endif | |
namespace glm | |
{ | |
typedef mat<2, 4, double, defaultp> dmat2x4; | |
} | |
namespace glm | |
{ | |
typedef mat<2, 4, double, lowp> lowp_dmat2x4; | |
typedef mat<2, 4, double, mediump> mediump_dmat2x4; | |
typedef mat<2, 4, double, highp> highp_dmat2x4; | |
} | |
namespace glm | |
{ | |
typedef mat<2, 4, float, defaultp> mat2x4; | |
} | |
namespace glm | |
{ | |
typedef mat<2, 4, float, lowp> lowp_mat2x4; | |
typedef mat<2, 4, float, mediump> mediump_mat2x4; | |
typedef mat<2, 4, float, highp> highp_mat2x4; | |
} | |
# 12494 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
struct mat<3, 3, T, Q> | |
{ | |
typedef vec<3, T, Q> col_type; | |
typedef vec<3, T, Q> row_type; | |
typedef mat<3, 3, T, Q> type; | |
typedef mat<3, 3, T, Q> transpose_type; | |
typedef T value_type; | |
private: | |
col_type value[3]; | |
public: | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } | |
GLM_FUNC_DECL col_type & operator[](length_type i); | |
GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 3, T, P> const& m); | |
GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
T x0, T y0, T z0, | |
T x1, T y1, T z1, | |
T x2, T y2, T z2); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
col_type const& v0, | |
col_type const& v1, | |
col_type const& v2); | |
template< | |
typename X1, typename Y1, typename Z1, | |
typename X2, typename Y2, typename Z2, | |
typename X3, typename Y3, typename Z3> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
X1 x1, Y1 y1, Z1 z1, | |
X2 x2, Y2 y2, Z2 z2, | |
X3 x3, Y3 y3, Z3 z3); | |
template<typename V1, typename V2, typename V3> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
vec<3, V1, Q> const& v1, | |
vec<3, V2, Q> const& v2, | |
vec<3, V3, Q> const& v3); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, U, P> const& m); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 3, T, Q> & operator=(mat<3, 3, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(mat<3, 3, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(mat<3, 3, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(mat<3, 3, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(mat<3, 3, U, Q> const& m); | |
GLM_FUNC_DECL mat<3, 3, T, Q> & operator++(); | |
GLM_FUNC_DECL mat<3, 3, T, Q> & operator--(); | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator++(int); | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator--(int); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); | |
} | |
#ifndef GLM_EXTERNAL_TEMPLATE | |
namespace glm | |
{ | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat() | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST | |
: value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1)} | |
# endif | |
{ | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION | |
this->value[0] = col_type(1, 0, 0); | |
this->value[1] = col_type(0, 1, 0); | |
this->value[2] = col_type(0, 0, 1); | |
# endif | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, T, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(m[2]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(T s) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(s, 0, 0); | |
this->value[1] = col_type(0, s, 0); | |
this->value[2] = col_type(0, 0, s); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat | |
( | |
T x0, T y0, T z0, | |
T x1, T y1, T z1, | |
T x2, T y2, T z2 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(x0, y0, z0); | |
this->value[1] = col_type(x1, y1, z1); | |
this->value[2] = col_type(x2, y2, z2); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v0), col_type(v1), col_type(v2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(v0); | |
this->value[1] = col_type(v1); | |
this->value[2] = col_type(v2); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template< | |
typename X1, typename Y1, typename Z1, | |
typename X2, typename Y2, typename Z2, | |
typename X3, typename Y3, typename Z3> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat | |
( | |
X1 x1, Y1 y1, Z1 z1, | |
X2 x2, Y2 y2, Z2 z2, | |
X3 x3, Y3 y3, Z3 z3 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(x1, y1, z1); | |
this->value[1] = col_type(x2, y2, z2); | |
this->value[2] = col_type(x3, y3, z3); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename V1, typename V2, typename V3> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v1), col_type(v2), col_type(v3)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(v1); | |
this->value[1] = col_type(v2); | |
this->value[2] = col_type(v3); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, U, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(m[2]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
this->value[2] = col_type(0, 0, 1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(m[2]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(0, 0, 1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
this->value[2] = col_type(m[2], 1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(0, 0, 1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
this->value[2] = col_type(m[2], 1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(m[2]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(m[2]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type & mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 3, T, Q>::col_type const& mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) const | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator=(mat<3, 3, U, Q> const& m) | |
{ | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
this->value[2] = m[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(U s) | |
{ | |
this->value[0] += s; | |
this->value[1] += s; | |
this->value[2] += s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(mat<3, 3, U, Q> const& m) | |
{ | |
this->value[0] += m[0]; | |
this->value[1] += m[1]; | |
this->value[2] += m[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(U s) | |
{ | |
this->value[0] -= s; | |
this->value[1] -= s; | |
this->value[2] -= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(mat<3, 3, U, Q> const& m) | |
{ | |
this->value[0] -= m[0]; | |
this->value[1] -= m[1]; | |
this->value[2] -= m[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(U s) | |
{ | |
this->value[0] *= s; | |
this->value[1] *= s; | |
this->value[2] *= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(mat<3, 3, U, Q> const& m) | |
{ | |
return (*this = *this * m); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(U s) | |
{ | |
this->value[0] /= s; | |
this->value[1] /= s; | |
this->value[2] /= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(mat<3, 3, U, Q> const& m) | |
{ | |
return *this *= inverse(m); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator++() | |
{ | |
++this->value[0]; | |
++this->value[1]; | |
++this->value[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator--() | |
{ | |
--this->value[0]; | |
--this->value[1]; | |
--this->value[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator++(int) | |
{ | |
mat<3, 3, T, Q> Result(*this); | |
++*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator--(int) | |
{ | |
mat<3, 3, T, Q> Result(*this); | |
--*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m) | |
{ | |
return m; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m) | |
{ | |
return mat<3, 3, T, Q>( | |
-m[0], | |
-m[1], | |
-m[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar) | |
{ | |
return mat<3, 3, T, Q>( | |
m[0] + scalar, | |
m[1] + scalar, | |
m[2] + scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m) | |
{ | |
return mat<3, 3, T, Q>( | |
m[0] + scalar, | |
m[1] + scalar, | |
m[2] + scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) | |
{ | |
return mat<3, 3, T, Q>( | |
m1[0] + m2[0], | |
m1[1] + m2[1], | |
m1[2] + m2[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar) | |
{ | |
return mat<3, 3, T, Q>( | |
m[0] - scalar, | |
m[1] - scalar, | |
m[2] - scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m) | |
{ | |
return mat<3, 3, T, Q>( | |
scalar - m[0], | |
scalar - m[1], | |
scalar - m[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) | |
{ | |
return mat<3, 3, T, Q>( | |
m1[0] - m2[0], | |
m1[1] - m2[1], | |
m1[2] - m2[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar) | |
{ | |
return mat<3, 3, T, Q>( | |
m[0] * scalar, | |
m[1] * scalar, | |
m[2] * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m) | |
{ | |
return mat<3, 3, T, Q>( | |
m[0] * scalar, | |
m[1] * scalar, | |
m[2] * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v) | |
{ | |
return typename mat<3, 3, T, Q>::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, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) | |
{ | |
return typename mat<3, 3, T, Q>::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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> 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 SrcB00 = m2[0][0]; | |
T const SrcB01 = m2[0][1]; | |
T const SrcB02 = m2[0][2]; | |
T const SrcB10 = m2[1][0]; | |
T const SrcB11 = m2[1][1]; | |
T const SrcB12 = m2[1][2]; | |
T const SrcB20 = m2[2][0]; | |
T const SrcB21 = m2[2][1]; | |
T const SrcB22 = m2[2][2]; | |
mat<3, 3, T, Q> Result; | |
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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) | |
{ | |
return mat<2, 3, T, Q>( | |
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], | |
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], | |
m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], | |
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], | |
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], | |
m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) | |
{ | |
return mat<4, 3, T, Q>( | |
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], | |
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], | |
m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], | |
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], | |
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], | |
m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], | |
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], | |
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], | |
m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2], | |
m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2], | |
m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2], | |
m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar) | |
{ | |
return mat<3, 3, T, Q>( | |
m[0] / scalar, | |
m[1] / scalar, | |
m[2] / scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m) | |
{ | |
return mat<3, 3, T, Q>( | |
scalar / m[0], | |
scalar / m[1], | |
scalar / m[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v) | |
{ | |
return inverse(m) * v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) | |
{ | |
return v * inverse(m); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) | |
{ | |
mat<3, 3, T, Q> m1_copy(m1); | |
return m1_copy /= m2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) | |
{ | |
return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) | |
{ | |
return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); | |
} | |
} | |
#endif | |
namespace glm | |
{ | |
typedef mat<3, 3, double, defaultp> dmat3x3; | |
typedef mat<3, 3, double, defaultp> dmat3; | |
} | |
namespace glm | |
{ | |
typedef mat<3, 3, double, lowp> lowp_dmat3; | |
typedef mat<3, 3, double, mediump> mediump_dmat3; | |
typedef mat<3, 3, double, highp> highp_dmat3; | |
typedef mat<3, 3, double, lowp> lowp_dmat3x3; | |
typedef mat<3, 3, double, mediump> mediump_dmat3x3; | |
typedef mat<3, 3, double, highp> highp_dmat3x3; | |
} | |
namespace glm | |
{ | |
typedef mat<3, 3, float, defaultp> mat3x3; | |
typedef mat<3, 3, float, defaultp> mat3; | |
} | |
namespace glm | |
{ | |
typedef mat<3, 3, float, lowp> lowp_mat3; | |
typedef mat<3, 3, float, mediump> mediump_mat3; | |
typedef mat<3, 3, float, highp> highp_mat3; | |
typedef mat<3, 3, float, lowp> lowp_mat3x3; | |
typedef mat<3, 3, float, mediump> mediump_mat3x3; | |
typedef mat<3, 3, float, highp> highp_mat3x3; | |
} | |
# 13411 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
struct mat<3, 4, T, Q> | |
{ | |
typedef vec<4, T, Q> col_type; | |
typedef vec<3, T, Q> row_type; | |
typedef mat<3, 4, T, Q> type; | |
typedef mat<4, 3, T, Q> transpose_type; | |
typedef T value_type; | |
private: | |
col_type value[3]; | |
public: | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } | |
GLM_FUNC_DECL col_type & operator[](length_type i); | |
GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 4, T, P> const& m); | |
GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
T x0, T y0, T z0, T w0, | |
T x1, T y1, T z1, T w1, | |
T x2, T y2, T z2, T w2); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
col_type const& v0, | |
col_type const& v1, | |
col_type const& v2); | |
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> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
X1 x1, Y1 y1, Z1 z1, W1 w1, | |
X2 x2, Y2 y2, Z2 z2, W2 w2, | |
X3 x3, Y3 y3, Z3 z3, W3 w3); | |
template<typename V1, typename V2, typename V3> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
vec<4, V1, Q> const& v1, | |
vec<4, V2, Q> const& v2, | |
vec<4, V3, Q> const& v3); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, U, P> const& m); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 4, T, Q> & operator=(mat<3, 4, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(mat<3, 4, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(mat<3, 4, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 4, T, Q> & operator*=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<3, 4, T, Q> & operator/=(U s); | |
GLM_FUNC_DECL mat<3, 4, T, Q> & operator++(); | |
GLM_FUNC_DECL mat<3, 4, T, Q> & operator--(); | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator++(int); | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator--(int); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<3, 4, T, Q>::col_type operator*(mat<3, 4, T, Q> const& m, typename mat<3, 4, T, Q>::row_type const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<3, 4, T, Q>::row_type operator*(typename mat<3, 4, T, Q>::col_type const& v, mat<3, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); | |
} | |
#ifndef GLM_EXTERNAL_TEMPLATE | |
namespace glm | |
{ | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat() | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST | |
: value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0)} | |
# endif | |
{ | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION | |
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); | |
# endif | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, T, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
this->value[2] = m[2]; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(T s) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(s, 0, 0, 0); | |
this->value[1] = col_type(0, s, 0, 0); | |
this->value[2] = col_type(0, 0, s, 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat | |
( | |
T x0, T y0, T z0, T w0, | |
T x1, T y1, T z1, T w1, | |
T x2, T y2, T z2, T w2 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{ | |
col_type(x0, y0, z0, w0), | |
col_type(x1, y1, z1, w1), | |
col_type(x2, y2, z2, w2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v0), col_type(v1), col_type(v2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = v0; | |
this->value[1] = v1; | |
this->value[2] = v2; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template< | |
typename X0, typename Y0, typename Z0, typename W0, | |
typename X1, typename Y1, typename Z1, typename W1, | |
typename X2, typename Y2, typename Z2, typename W2> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat | |
( | |
X0 x0, Y0 y0, Z0 z0, W0 w0, | |
X1 x1, Y1 y1, Z1 z1, W1 w1, | |
X2 x2, Y2 y2, Z2 z2, W2 w2 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{ | |
col_type(x0, y0, z0, w0), | |
col_type(x1, y1, z1, w1), | |
col_type(x2, y2, z2, w2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename V1, typename V2, typename V3> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(vec<4, V1, Q> const& v0, vec<4, V2, Q> const& v1, vec<4, V3, Q> const& v2) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v0), col_type(v1), col_type(v2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(v0); | |
this->value[1] = col_type(v1); | |
this->value[2] = col_type(v2); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, U, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(m[2]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0, 0); | |
this->value[1] = col_type(m[1], 0, 0); | |
this->value[2] = col_type(0, 0, 1, 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
this->value[2] = col_type(m[2], 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(m[2]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
this->value[2] = col_type(0, 0, 1, 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0, 0); | |
this->value[1] = col_type(m[1], 0, 0); | |
this->value[2] = col_type(m[2], 1, 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(0, 0, 1, 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0, 0); | |
this->value[1] = col_type(m[1], 0, 0); | |
this->value[2] = col_type(m[2], 1, 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
this->value[2] = col_type(m[2], 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type & mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 4, T, Q>::col_type const& mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) const | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator=(mat<3, 4, U, Q> const& m) | |
{ | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
this->value[2] = m[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(U s) | |
{ | |
this->value[0] += s; | |
this->value[1] += s; | |
this->value[2] += s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(mat<3, 4, U, Q> const& m) | |
{ | |
this->value[0] += m[0]; | |
this->value[1] += m[1]; | |
this->value[2] += m[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(U s) | |
{ | |
this->value[0] -= s; | |
this->value[1] -= s; | |
this->value[2] -= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(mat<3, 4, U, Q> const& m) | |
{ | |
this->value[0] -= m[0]; | |
this->value[1] -= m[1]; | |
this->value[2] -= m[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator*=(U s) | |
{ | |
this->value[0] *= s; | |
this->value[1] *= s; | |
this->value[2] *= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> & mat<3, 4, T, Q>::operator/=(U s) | |
{ | |
this->value[0] /= s; | |
this->value[1] /= s; | |
this->value[2] /= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator++() | |
{ | |
++this->value[0]; | |
++this->value[1]; | |
++this->value[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator--() | |
{ | |
--this->value[0]; | |
--this->value[1]; | |
--this->value[2]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator++(int) | |
{ | |
mat<3, 4, T, Q> Result(*this); | |
++*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator--(int) | |
{ | |
mat<3, 4, T, Q> Result(*this); | |
--*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m) | |
{ | |
return m; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m) | |
{ | |
return mat<3, 4, T, Q>( | |
-m[0], | |
-m[1], | |
-m[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar) | |
{ | |
return mat<3, 4, T, Q>( | |
m[0] + scalar, | |
m[1] + scalar, | |
m[2] + scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) | |
{ | |
return mat<3, 4, T, Q>( | |
m1[0] + m2[0], | |
m1[1] + m2[1], | |
m1[2] + m2[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar) | |
{ | |
return mat<3, 4, T, Q>( | |
m[0] - scalar, | |
m[1] - scalar, | |
m[2] - scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) | |
{ | |
return mat<3, 4, T, Q>( | |
m1[0] - m2[0], | |
m1[1] - m2[1], | |
m1[2] - m2[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar) | |
{ | |
return mat<3, 4, T, Q>( | |
m[0] * scalar, | |
m[1] * scalar, | |
m[2] * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m) | |
{ | |
return mat<3, 4, T, Q>( | |
m[0] * scalar, | |
m[1] * scalar, | |
m[2] * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type operator* | |
( | |
mat<3, 4, T, Q> const& m, | |
typename mat<3, 4, T, Q>::row_type const& v | |
) | |
{ | |
return typename mat<3, 4, T, Q>::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); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::row_type operator* | |
( | |
typename mat<3, 4, T, Q>::col_type const& v, | |
mat<3, 4, T, Q> const& m | |
) | |
{ | |
return typename mat<3, 4, T, Q>::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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> 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]; | |
mat<4, 4, T, Q> Result; | |
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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2) | |
{ | |
return mat<2, 4, T, Q>( | |
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], | |
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], | |
m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], | |
m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2], | |
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], | |
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], | |
m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], | |
m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2) | |
{ | |
return mat<3, 4, T, Q>( | |
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], | |
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], | |
m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], | |
m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2], | |
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], | |
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], | |
m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], | |
m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2], | |
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], | |
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], | |
m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2], | |
m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar) | |
{ | |
return mat<3, 4, T, Q>( | |
m[0] / scalar, | |
m[1] / scalar, | |
m[2] / scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m) | |
{ | |
return mat<3, 4, T, Q>( | |
scalar / m[0], | |
scalar / m[1], | |
scalar / m[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) | |
{ | |
return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) | |
{ | |
return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); | |
} | |
} | |
#endif | |
namespace glm | |
{ | |
typedef mat<3, 4, double, defaultp> dmat3x4; | |
} | |
namespace glm | |
{ | |
typedef mat<3, 4, double, lowp> lowp_dmat3x4; | |
typedef mat<3, 4, double, mediump> mediump_dmat3x4; | |
typedef mat<3, 4, double, highp> highp_dmat3x4; | |
} | |
namespace glm | |
{ | |
typedef mat<3, 4, float, defaultp> mat3x4; | |
} | |
namespace glm | |
{ | |
typedef mat<3, 4, float, lowp> lowp_mat3x4; | |
typedef mat<3, 4, float, mediump> mediump_mat3x4; | |
typedef mat<3, 4, float, highp> highp_mat3x4; | |
} | |
# 14241 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
struct mat<4, 2, T, Q> | |
{ | |
typedef vec<2, T, Q> col_type; | |
typedef vec<4, T, Q> row_type; | |
typedef mat<4, 2, T, Q> type; | |
typedef mat<2, 4, T, Q> transpose_type; | |
typedef T value_type; | |
private: | |
col_type value[4]; | |
public: | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; } | |
GLM_FUNC_DECL col_type & operator[](length_type i); | |
GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 2, T, P> const& m); | |
GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
T x0, T y0, | |
T x1, T y1, | |
T x2, T y2, | |
T x3, T y3); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
col_type const& v0, | |
col_type const& v1, | |
col_type const& v2, | |
col_type const& v3); | |
template< | |
typename X0, typename Y0, | |
typename X1, typename Y1, | |
typename X2, typename Y2, | |
typename X3, typename Y3> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
X0 x0, Y0 y0, | |
X1 x1, Y1 y1, | |
X2 x2, Y2 y2, | |
X3 x3, Y3 y3); | |
template<typename V1, typename V2, typename V3, typename V4> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
vec<2, V1, Q> const& v1, | |
vec<2, V2, Q> const& v2, | |
vec<2, V3, Q> const& v3, | |
vec<2, V4, Q> const& v4); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, U, P> const& m); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 2, T, Q> & operator=(mat<4, 2, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(mat<4, 2, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(mat<4, 2, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 2, T, Q> & operator*=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 2, T, Q> & operator/=(U s); | |
GLM_FUNC_DECL mat<4, 2, T, Q> & operator++ (); | |
GLM_FUNC_DECL mat<4, 2, T, Q> & operator-- (); | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator++(int); | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator--(int); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); | |
} | |
#ifndef GLM_EXTERNAL_TEMPLATE | |
namespace glm | |
{ | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat() | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST | |
: value{col_type(1, 0), col_type(0, 1), col_type(0, 0), col_type(0, 0)} | |
# endif | |
{ | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION | |
this->value[0] = col_type(1, 0); | |
this->value[1] = col_type(0, 1); | |
this->value[2] = col_type(0, 0); | |
this->value[3] = col_type(0, 0); | |
# endif | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, T, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
this->value[2] = m[2]; | |
this->value[3] = m[3]; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(T s) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(s, 0), col_type(0, s), col_type(0, 0), col_type(0, 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(s, 0); | |
this->value[1] = col_type(0, s); | |
this->value[2] = col_type(0, 0); | |
this->value[3] = col_type(0, 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat | |
( | |
T x0, T y0, | |
T x1, T y1, | |
T x2, T y2, | |
T x3, T y3 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = v0; | |
this->value[1] = v1; | |
this->value[2] = v2; | |
this->value[3] = v3; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template< | |
typename X0, typename Y0, | |
typename X1, typename Y1, | |
typename X2, typename Y2, | |
typename X3, typename Y3> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat | |
( | |
X0 x0, Y0 y0, | |
X1 x1, Y1 y1, | |
X2 x2, Y2 y2, | |
X3 x3, Y3 y3 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename V0, typename V1, typename V2, typename V3> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2, vec<2, V3, Q> const& v3) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(v0); | |
this->value[1] = col_type(v1); | |
this->value[2] = col_type(v2); | |
this->value[3] = col_type(v3); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, U, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(0); | |
this->value[3] = col_type(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(0); | |
this->value[3] = col_type(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(0); | |
this->value[3] = col_type(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type & mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 2, T, Q>::col_type const& mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) const | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q>& mat<4, 2, T, Q>::operator=(mat<4, 2, U, Q> 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, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(U s) | |
{ | |
this->value[0] += s; | |
this->value[1] += s; | |
this->value[2] += s; | |
this->value[3] += s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(mat<4, 2, U, Q> 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, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(U s) | |
{ | |
this->value[0] -= s; | |
this->value[1] -= s; | |
this->value[2] -= s; | |
this->value[3] -= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(mat<4, 2, U, Q> 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, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator*=(U s) | |
{ | |
this->value[0] *= s; | |
this->value[1] *= s; | |
this->value[2] *= s; | |
this->value[3] *= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator/=(U s) | |
{ | |
this->value[0] /= s; | |
this->value[1] /= s; | |
this->value[2] /= s; | |
this->value[3] /= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator++() | |
{ | |
++this->value[0]; | |
++this->value[1]; | |
++this->value[2]; | |
++this->value[3]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator--() | |
{ | |
--this->value[0]; | |
--this->value[1]; | |
--this->value[2]; | |
--this->value[3]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator++(int) | |
{ | |
mat<4, 2, T, Q> Result(*this); | |
++*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator--(int) | |
{ | |
mat<4, 2, T, Q> Result(*this); | |
--*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m) | |
{ | |
return m; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m) | |
{ | |
return mat<4, 2, T, Q>( | |
-m[0], | |
-m[1], | |
-m[2], | |
-m[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar) | |
{ | |
return mat<4, 2, T, Q>( | |
m[0] + scalar, | |
m[1] + scalar, | |
m[2] + scalar, | |
m[3] + scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) | |
{ | |
return mat<4, 2, T, Q>( | |
m1[0] + m2[0], | |
m1[1] + m2[1], | |
m1[2] + m2[2], | |
m1[3] + m2[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar) | |
{ | |
return mat<4, 2, T, Q>( | |
m[0] - scalar, | |
m[1] - scalar, | |
m[2] - scalar, | |
m[3] - scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) | |
{ | |
return mat<4, 2, T, Q>( | |
m1[0] - m2[0], | |
m1[1] - m2[1], | |
m1[2] - m2[2], | |
m1[3] - m2[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar) | |
{ | |
return mat<4, 2, T, Q>( | |
m[0] * scalar, | |
m[1] * scalar, | |
m[2] * scalar, | |
m[3] * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m) | |
{ | |
return mat<4, 2, T, Q>( | |
m[0] * scalar, | |
m[1] * scalar, | |
m[2] * scalar, | |
m[3] * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v) | |
{ | |
return typename mat<4, 2, T, Q>::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, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m) | |
{ | |
return typename mat<4, 2, T, Q>::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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> 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]; | |
mat<2, 2, T, Q> Result; | |
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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2) | |
{ | |
return mat<3, 2, T, Q>( | |
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], | |
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], | |
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], | |
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], | |
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], | |
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2) | |
{ | |
return mat<4, 2, T, Q>( | |
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], | |
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], | |
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], | |
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], | |
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], | |
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], | |
m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3], | |
m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar) | |
{ | |
return mat<4, 2, T, Q>( | |
m[0] / scalar, | |
m[1] / scalar, | |
m[2] / scalar, | |
m[3] / scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m) | |
{ | |
return mat<4, 2, T, Q>( | |
scalar / m[0], | |
scalar / m[1], | |
scalar / m[2], | |
scalar / m[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) | |
{ | |
return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) | |
{ | |
return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); | |
} | |
} | |
#endif | |
namespace glm | |
{ | |
typedef mat<4, 2, double, defaultp> dmat4x2; | |
} | |
namespace glm | |
{ | |
typedef mat<4, 2, double, lowp> lowp_dmat4x2; | |
typedef mat<4, 2, double, mediump> mediump_dmat4x2; | |
typedef mat<4, 2, double, highp> highp_dmat4x2; | |
} | |
namespace glm | |
{ | |
typedef mat<4, 2, float, defaultp> mat4x2; | |
} | |
namespace glm | |
{ | |
typedef mat<4, 2, float, lowp> lowp_mat4x2; | |
typedef mat<4, 2, float, mediump> mediump_mat4x2; | |
typedef mat<4, 2, float, highp> highp_mat4x2; | |
} | |
# 15073 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
struct mat<4, 3, T, Q> | |
{ | |
typedef vec<3, T, Q> col_type; | |
typedef vec<4, T, Q> row_type; | |
typedef mat<4, 3, T, Q> type; | |
typedef mat<3, 4, T, Q> transpose_type; | |
typedef T value_type; | |
private: | |
col_type value[4]; | |
public: | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; } | |
GLM_FUNC_DECL col_type & operator[](length_type i); | |
GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 3, T, P> const& m); | |
GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
T const& x0, T const& y0, T const& z0, | |
T const& x1, T const& y1, T const& z1, | |
T const& x2, T const& y2, T const& z2, | |
T const& x3, T const& y3, T const& z3); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
col_type const& v0, | |
col_type const& v1, | |
col_type const& v2, | |
col_type const& v3); | |
template< | |
typename X1, typename Y1, typename Z1, | |
typename X2, typename Y2, typename Z2, | |
typename X3, typename Y3, typename Z3, | |
typename X4, typename Y4, typename Z4> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
X1 const& x1, Y1 const& y1, Z1 const& z1, | |
X2 const& x2, Y2 const& y2, Z2 const& z2, | |
X3 const& x3, Y3 const& y3, Z3 const& z3, | |
X4 const& x4, Y4 const& y4, Z4 const& z4); | |
template<typename V1, typename V2, typename V3, typename V4> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
vec<3, V1, Q> const& v1, | |
vec<3, V2, Q> const& v2, | |
vec<3, V3, Q> const& v3, | |
vec<3, V4, Q> const& v4); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, U, P> const& m); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 3, T, Q> & operator=(mat<4, 3, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(mat<4, 3, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(mat<4, 3, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 3, T, Q> & operator*=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 3, T, Q> & operator/=(U s); | |
GLM_FUNC_DECL mat<4, 3, T, Q>& operator++(); | |
GLM_FUNC_DECL mat<4, 3, T, Q>& operator--(); | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator++(int); | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator--(int); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<4, 3, T, Q>::col_type operator*(mat<4, 3, T, Q> const& m, typename mat<4, 3, T, Q>::row_type const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<4, 3, T, Q>::row_type operator*(typename mat<4, 3, T, Q>::col_type const& v, mat<4, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); | |
} | |
#ifndef GLM_EXTERNAL_TEMPLATE | |
namespace glm | |
{ | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat() | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST | |
: value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1), col_type(0, 0, 0)} | |
# endif | |
{ | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION | |
this->value[0] = col_type(1, 0, 0); | |
this->value[1] = col_type(0, 1, 0); | |
this->value[2] = col_type(0, 0, 1); | |
this->value[3] = col_type(0, 0, 0); | |
# endif | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, T, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
this->value[2] = m[2]; | |
this->value[3] = m[3]; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(T const& s) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s), col_type(0, 0, 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(s, 0, 0); | |
this->value[1] = col_type(0, s, 0); | |
this->value[2] = col_type(0, 0, s); | |
this->value[3] = col_type(0, 0, 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat | |
( | |
T const& x0, T const& y0, T const& z0, | |
T const& x1, T const& y1, T const& z1, | |
T const& x2, T const& y2, T const& z2, | |
T const& x3, T const& y3, T const& z3 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = v0; | |
this->value[1] = v1; | |
this->value[2] = v2; | |
this->value[3] = v3; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template< | |
typename X0, typename Y0, typename Z0, | |
typename X1, typename Y1, typename Z1, | |
typename X2, typename Y2, typename Z2, | |
typename X3, typename Y3, typename Z3> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat | |
( | |
X0 const& x0, Y0 const& y0, Z0 const& z0, | |
X1 const& x1, Y1 const& y1, Z1 const& z1, | |
X2 const& x2, Y2 const& y2, Z2 const& z2, | |
X3 const& x3, Y3 const& y3, Z3 const& z3 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename V1, typename V2, typename V3, typename V4> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3, vec<3, V4, Q> const& v4) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(v1); | |
this->value[1] = col_type(v2); | |
this->value[2] = col_type(v3); | |
this->value[3] = col_type(v4); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, U, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
this->value[2] = col_type(0, 0, 1); | |
this->value[3] = col_type(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(0, 0, 1); | |
this->value[3] = col_type(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
this->value[2] = col_type(m[2], 1); | |
this->value[3] = col_type(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
this->value[2] = col_type(0, 0, 1); | |
this->value[3] = col_type(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(m[3], 0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
this->value[2] = col_type(m[2], 1); | |
this->value[3] = col_type(m[3], 0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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(0); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type & mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 3, T, Q>::col_type const& mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) const | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q>& mat<4, 3, T, Q>::operator=(mat<4, 3, U, Q> 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, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(U s) | |
{ | |
this->value[0] += s; | |
this->value[1] += s; | |
this->value[2] += s; | |
this->value[3] += s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(mat<4, 3, U, Q> 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, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(U s) | |
{ | |
this->value[0] -= s; | |
this->value[1] -= s; | |
this->value[2] -= s; | |
this->value[3] -= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(mat<4, 3, U, Q> 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, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator*=(U s) | |
{ | |
this->value[0] *= s; | |
this->value[1] *= s; | |
this->value[2] *= s; | |
this->value[3] *= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator/=(U s) | |
{ | |
this->value[0] /= s; | |
this->value[1] /= s; | |
this->value[2] /= s; | |
this->value[3] /= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator++() | |
{ | |
++this->value[0]; | |
++this->value[1]; | |
++this->value[2]; | |
++this->value[3]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator--() | |
{ | |
--this->value[0]; | |
--this->value[1]; | |
--this->value[2]; | |
--this->value[3]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator++(int) | |
{ | |
mat<4, 3, T, Q> Result(*this); | |
++*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator--(int) | |
{ | |
mat<4, 3, T, Q> Result(*this); | |
--*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m) | |
{ | |
return m; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m) | |
{ | |
return mat<4, 3, T, Q>( | |
-m[0], | |
-m[1], | |
-m[2], | |
-m[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s) | |
{ | |
return mat<4, 3, T, Q>( | |
m[0] + s, | |
m[1] + s, | |
m[2] + s, | |
m[3] + s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) | |
{ | |
return mat<4, 3, T, Q>( | |
m1[0] + m2[0], | |
m1[1] + m2[1], | |
m1[2] + m2[2], | |
m1[3] + m2[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s) | |
{ | |
return mat<4, 3, T, Q>( | |
m[0] - s, | |
m[1] - s, | |
m[2] - s, | |
m[3] - s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) | |
{ | |
return mat<4, 3, T, Q>( | |
m1[0] - m2[0], | |
m1[1] - m2[1], | |
m1[2] - m2[2], | |
m1[3] - m2[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s) | |
{ | |
return mat<4, 3, T, Q>( | |
m[0] * s, | |
m[1] * s, | |
m[2] * s, | |
m[3] * s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m) | |
{ | |
return mat<4, 3, T, Q>( | |
m[0] * s, | |
m[1] * s, | |
m[2] * s, | |
m[3] * s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type operator* | |
( | |
mat<4, 3, T, Q> const& m, | |
typename mat<4, 3, T, Q>::row_type const& v) | |
{ | |
return typename mat<4, 3, T, Q>::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, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::row_type operator* | |
( | |
typename mat<4, 3, T, Q>::col_type const& v, | |
mat<4, 3, T, Q> const& m) | |
{ | |
return typename mat<4, 3, T, Q>::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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2) | |
{ | |
return mat<2, 3, T, Q>( | |
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], | |
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], | |
m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], | |
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], | |
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], | |
m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> 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]; | |
mat<3, 3, T, Q> Result; | |
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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2) | |
{ | |
return mat<4, 3, T, Q>( | |
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], | |
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], | |
m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], | |
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], | |
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], | |
m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], | |
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], | |
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], | |
m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3], | |
m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3], | |
m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3], | |
m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2] + m1[3][2] * m2[3][3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s) | |
{ | |
return mat<4, 3, T, Q>( | |
m[0] / s, | |
m[1] / s, | |
m[2] / s, | |
m[3] / s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m) | |
{ | |
return mat<4, 3, T, Q>( | |
s / m[0], | |
s / m[1], | |
s / m[2], | |
s / m[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) | |
{ | |
return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) | |
{ | |
return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); | |
} | |
} | |
#endif | |
namespace glm | |
{ | |
typedef mat<4, 3, double, defaultp> dmat4x3; | |
} | |
namespace glm | |
{ | |
typedef mat<4, 3, double, lowp> lowp_dmat4x3; | |
typedef mat<4, 3, double, mediump> mediump_dmat4x3; | |
typedef mat<4, 3, double, highp> highp_dmat4x3; | |
} | |
namespace glm | |
{ | |
typedef mat<4, 3, float, defaultp> mat4x3; | |
} | |
namespace glm | |
{ | |
typedef mat<4, 3, float, lowp> lowp_mat4x3; | |
typedef mat<4, 3, float, mediump> mediump_mat4x3; | |
typedef mat<4, 3, float, highp> highp_mat4x3; | |
} | |
# 15928 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
struct mat<4, 4, T, Q> | |
{ | |
typedef vec<4, T, Q> col_type; | |
typedef vec<4, T, Q> row_type; | |
typedef mat<4, 4, T, Q> type; | |
typedef mat<4, 4, T, Q> transpose_type; | |
typedef T value_type; | |
private: | |
col_type value[4]; | |
public: | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} | |
GLM_FUNC_DECL col_type & operator[](length_type i); | |
GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 4, T, P> const& m); | |
GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
T const& x0, T const& y0, T const& z0, T const& w0, | |
T const& x1, T const& y1, T const& z1, T const& w1, | |
T const& x2, T const& y2, T const& z2, T const& w2, | |
T const& x3, T const& y3, T const& z3, T const& w3); | |
GLM_FUNC_DECL GLM_CONSTEXPR mat( | |
col_type const& v0, | |
col_type const& v1, | |
col_type const& v2, | |
col_type const& v3); | |
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 GLM_CONSTEXPR mat( | |
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 GLM_CONSTEXPR mat( | |
vec<4, V1, Q> const& v1, | |
vec<4, V2, Q> const& v2, | |
vec<4, V3, Q> const& v3, | |
vec<4, V4, Q> const& v4); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, U, P> const& m); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 4, T, Q> & operator=(mat<4, 4, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(mat<4, 4, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(mat<4, 4, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(mat<4, 4, U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(U s); | |
template<typename U> | |
GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(mat<4, 4, U, Q> const& m); | |
GLM_FUNC_DECL mat<4, 4, T, Q> & operator++(); | |
GLM_FUNC_DECL mat<4, 4, T, Q> & operator--(); | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator++(int); | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator--(int); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const& s); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator*(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator*(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); | |
} | |
#ifndef GLM_EXTERNAL_TEMPLATE | |
namespace glm | |
{ | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat() | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST | |
: value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} | |
# endif | |
{ | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION | |
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); | |
this->value[3] = col_type(0, 0, 0, 1); | |
# endif | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, T, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
this->value[2] = m[2]; | |
this->value[3] = m[3]; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(T const& s) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0), col_type(0, 0, 0, s)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(s, 0, 0, 0); | |
this->value[1] = col_type(0, s, 0, 0); | |
this->value[2] = col_type(0, 0, s, 0); | |
this->value[3] = col_type(0, 0, 0, s); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat | |
( | |
T const& x0, T const& y0, T const& z0, T const& w0, | |
T const& x1, T const& y1, T const& z1, T const& w1, | |
T const& x2, T const& y2, T const& z2, T const& w2, | |
T const& x3, T const& y3, T const& z3, T const& w3 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{ | |
col_type(x0, y0, z0, w0), | |
col_type(x1, y1, z1, w1), | |
col_type(x2, y2, z2, w2), | |
col_type(x3, y3, z3, w3)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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); | |
this->value[3] = col_type(x3, y3, z3, w3); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = v0; | |
this->value[1] = v1; | |
this->value[2] = v2; | |
this->value[3] = v3; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, U, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
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]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
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_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat | |
( | |
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 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(x1, y1, z1, w1), col_type(x2, y2, z2, w2), col_type(x3, y3, z3, w3), col_type(x4, y4, z4, w4)} | |
# endif | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<X1>::is_iec559 || std::numeric_limits<X1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<Y1>::is_iec559 || std::numeric_limits<Y1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<Z1>::is_iec559 || std::numeric_limits<Z1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<W1>::is_iec559 || std::numeric_limits<W1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<X2>::is_iec559 || std::numeric_limits<X2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 5th parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<Y2>::is_iec559 || std::numeric_limits<Y2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 6th parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<Z2>::is_iec559 || std::numeric_limits<Z2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 7th parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<W2>::is_iec559 || std::numeric_limits<W2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 8th parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<X3>::is_iec559 || std::numeric_limits<X3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 9th parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<Y3>::is_iec559 || std::numeric_limits<Y3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 10th parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<Z3>::is_iec559 || std::numeric_limits<Z3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 11th parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<W3>::is_iec559 || std::numeric_limits<W3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 12th parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<X4>::is_iec559 || std::numeric_limits<X4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 13th parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<Y4>::is_iec559 || std::numeric_limits<Y4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 14th parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<Z4>::is_iec559 || std::numeric_limits<Z4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 15th parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<W4>::is_iec559 || std::numeric_limits<W4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 16th parameter type invalid."); | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(x1, y1, z1, w1); | |
this->value[1] = col_type(x2, y2, z2, w2); | |
this->value[2] = col_type(x3, y3, z3, w3); | |
this->value[3] = col_type(x4, y4, z4, w4); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename V1, typename V2, typename V3, typename V4> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2, vec<4, V3, Q> const& v3, vec<4, V4, Q> const& v4) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)} | |
# endif | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<V1>::is_iec559 || std::numeric_limits<V1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<V2>::is_iec559 || std::numeric_limits<V2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<V3>::is_iec559 || std::numeric_limits<V3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid."); | |
GLM_STATIC_ASSERT(std::numeric_limits<V4>::is_iec559 || std::numeric_limits<V4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid."); | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(v1); | |
this->value[1] = col_type(v2); | |
this->value[2] = col_type(v3); | |
this->value[3] = col_type(v4); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0, 0); | |
this->value[1] = col_type(m[1], 0, 0); | |
this->value[2] = col_type(0, 0, 1, 0); | |
this->value[3] = col_type(0, 0, 0, 1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(0, 0, 0, 1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
this->value[2] = col_type(m[2], 0); | |
this->value[3] = col_type(0, 0, 0, 1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
this->value[2] = col_type(0, 0, 1, 0); | |
this->value[3] = col_type(0, 0, 0, 1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0), col_type(0, 0, 0, 1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0, 0); | |
this->value[1] = col_type(m[1], 0, 0); | |
this->value[2] = col_type(m[2], 1, 0); | |
this->value[3] = col_type(0, 0, 0, 1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
this->value[2] = col_type(0, 0, 1, 0); | |
this->value[3] = col_type(0, 0, 0, 1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0, 0); | |
this->value[1] = col_type(m[1], 0, 0); | |
this->value[2] = col_type(0, 0, 1, 0); | |
this->value[3] = col_type(0, 0, 0, 1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0, 0, 0, 1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
this->value[2] = m[2]; | |
this->value[3] = col_type(0, 0, 0, 1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(m[3], 1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0], 0); | |
this->value[1] = col_type(m[1], 0); | |
this->value[2] = col_type(m[2], 0); | |
this->value[3] = col_type(m[3], 1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type & mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 4, T, Q>::col_type const& mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) const | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator=(mat<4, 4, U, Q> 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, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(U s) | |
{ | |
this->value[0] += s; | |
this->value[1] += s; | |
this->value[2] += s; | |
this->value[3] += s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(mat<4, 4, U, Q> 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, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(U s) | |
{ | |
this->value[0] -= s; | |
this->value[1] -= s; | |
this->value[2] -= s; | |
this->value[3] -= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(mat<4, 4, U, Q> 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, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(U s) | |
{ | |
this->value[0] *= s; | |
this->value[1] *= s; | |
this->value[2] *= s; | |
this->value[3] *= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(mat<4, 4, U, Q> const& m) | |
{ | |
return (*this = *this * m); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(U s) | |
{ | |
this->value[0] /= s; | |
this->value[1] /= s; | |
this->value[2] /= s; | |
this->value[3] /= s; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(mat<4, 4, U, Q> const& m) | |
{ | |
return *this *= inverse(m); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator++() | |
{ | |
++this->value[0]; | |
++this->value[1]; | |
++this->value[2]; | |
++this->value[3]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator--() | |
{ | |
--this->value[0]; | |
--this->value[1]; | |
--this->value[2]; | |
--this->value[3]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator++(int) | |
{ | |
mat<4, 4, T, Q> Result(*this); | |
++*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator--(int) | |
{ | |
mat<4, 4, T, Q> Result(*this); | |
--*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m) | |
{ | |
return m; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m) | |
{ | |
return mat<4, 4, T, Q>( | |
-m[0], | |
-m[1], | |
-m[2], | |
-m[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s) | |
{ | |
return mat<4, 4, T, Q>( | |
m[0] + s, | |
m[1] + s, | |
m[2] + s, | |
m[3] + s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m) | |
{ | |
return mat<4, 4, T, Q>( | |
m[0] + s, | |
m[1] + s, | |
m[2] + s, | |
m[3] + s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) | |
{ | |
return mat<4, 4, T, Q>( | |
m1[0] + m2[0], | |
m1[1] + m2[1], | |
m1[2] + m2[2], | |
m1[3] + m2[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s) | |
{ | |
return mat<4, 4, T, Q>( | |
m[0] - s, | |
m[1] - s, | |
m[2] - s, | |
m[3] - s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m) | |
{ | |
return mat<4, 4, T, Q>( | |
s - m[0], | |
s - m[1], | |
s - m[2], | |
s - m[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) | |
{ | |
return mat<4, 4, T, Q>( | |
m1[0] - m2[0], | |
m1[1] - m2[1], | |
m1[2] - m2[2], | |
m1[3] - m2[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const & s) | |
{ | |
return mat<4, 4, T, Q>( | |
m[0] * s, | |
m[1] * s, | |
m[2] * s, | |
m[3] * s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m) | |
{ | |
return mat<4, 4, T, Q>( | |
m[0] * s, | |
m[1] * s, | |
m[2] * s, | |
m[3] * s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator* | |
( | |
mat<4, 4, T, Q> const& m, | |
typename mat<4, 4, T, Q>::row_type const& v | |
) | |
{ | |
# 16665 "glm-amalgamated/glm.h" | |
typename mat<4, 4, T, Q>::col_type const Mov0(v[0]); | |
typename mat<4, 4, T, Q>::col_type const Mov1(v[1]); | |
typename mat<4, 4, T, Q>::col_type const Mul0 = m[0] * Mov0; | |
typename mat<4, 4, T, Q>::col_type const Mul1 = m[1] * Mov1; | |
typename mat<4, 4, T, Q>::col_type const Add0 = Mul0 + Mul1; | |
typename mat<4, 4, T, Q>::col_type const Mov2(v[2]); | |
typename mat<4, 4, T, Q>::col_type const Mov3(v[3]); | |
typename mat<4, 4, T, Q>::col_type const Mul2 = m[2] * Mov2; | |
typename mat<4, 4, T, Q>::col_type const Mul3 = m[3] * Mov3; | |
typename mat<4, 4, T, Q>::col_type const Add1 = Mul2 + Mul3; | |
typename mat<4, 4, T, Q>::col_type const Add2 = Add0 + Add1; | |
return Add2; | |
# 16685 "glm-amalgamated/glm.h" | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator* | |
( | |
typename mat<4, 4, T, Q>::col_type const& v, | |
mat<4, 4, T, Q> const& m | |
) | |
{ | |
return typename mat<4, 4, T, Q>::row_type( | |
m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3] * v[3], | |
m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3] * v[3], | |
m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3] * v[3], | |
m[3][0] * v[0] + m[3][1] * v[1] + m[3][2] * v[2] + m[3][3] * v[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) | |
{ | |
return mat<2, 4, T, Q>( | |
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], | |
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], | |
m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], | |
m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3], | |
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], | |
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], | |
m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], | |
m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) | |
{ | |
return mat<3, 4, T, Q>( | |
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], | |
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], | |
m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], | |
m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3], | |
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], | |
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], | |
m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], | |
m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3], | |
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], | |
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], | |
m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3], | |
m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2] + m1[3][3] * m2[2][3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) | |
{ | |
typename mat<4, 4, T, Q>::col_type const SrcA0 = m1[0]; | |
typename mat<4, 4, T, Q>::col_type const SrcA1 = m1[1]; | |
typename mat<4, 4, T, Q>::col_type const SrcA2 = m1[2]; | |
typename mat<4, 4, T, Q>::col_type const SrcA3 = m1[3]; | |
typename mat<4, 4, T, Q>::col_type const SrcB0 = m2[0]; | |
typename mat<4, 4, T, Q>::col_type const SrcB1 = m2[1]; | |
typename mat<4, 4, T, Q>::col_type const SrcB2 = m2[2]; | |
typename mat<4, 4, T, Q>::col_type const SrcB3 = m2[3]; | |
mat<4, 4, T, Q> Result; | |
Result[0] = SrcA0 * SrcB0[0] + SrcA1 * SrcB0[1] + SrcA2 * SrcB0[2] + SrcA3 * SrcB0[3]; | |
Result[1] = SrcA0 * SrcB1[0] + SrcA1 * SrcB1[1] + SrcA2 * SrcB1[2] + SrcA3 * SrcB1[3]; | |
Result[2] = SrcA0 * SrcB2[0] + SrcA1 * SrcB2[1] + SrcA2 * SrcB2[2] + SrcA3 * SrcB2[3]; | |
Result[3] = SrcA0 * SrcB3[0] + SrcA1 * SrcB3[1] + SrcA2 * SrcB3[2] + SrcA3 * SrcB3[3]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s) | |
{ | |
return mat<4, 4, T, Q>( | |
m[0] / s, | |
m[1] / s, | |
m[2] / s, | |
m[3] / s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m) | |
{ | |
return mat<4, 4, T, Q>( | |
s / m[0], | |
s / m[1], | |
s / m[2], | |
s / m[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v) | |
{ | |
return inverse(m) * v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m) | |
{ | |
return v * inverse(m); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) | |
{ | |
mat<4, 4, T, Q> m1_copy(m1); | |
return m1_copy /= m2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) | |
{ | |
return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) | |
{ | |
return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); | |
} | |
} | |
#if GLM_CONFIG_SIMD == GLM_ENABLE | |
# include "type_mat4x4_simd.inl" | |
#endif | |
#endif | |
namespace glm | |
{ | |
typedef mat<4, 4, double, defaultp> dmat4x4; | |
typedef mat<4, 4, double, defaultp> dmat4; | |
} | |
namespace glm | |
{ | |
typedef mat<4, 4, double, lowp> lowp_dmat4; | |
typedef mat<4, 4, double, mediump> mediump_dmat4; | |
typedef mat<4, 4, double, highp> highp_dmat4; | |
typedef mat<4, 4, double, lowp> lowp_dmat4x4; | |
typedef mat<4, 4, double, mediump> mediump_dmat4x4; | |
typedef mat<4, 4, double, highp> highp_dmat4x4; | |
} | |
namespace glm | |
{ | |
typedef mat<4, 4, float, defaultp> mat4x4; | |
typedef mat<4, 4, float, defaultp> mat4; | |
} | |
namespace glm | |
{ | |
typedef mat<4, 4, float, lowp> lowp_mat4; | |
typedef mat<4, 4, float, mediump> mediump_mat4; | |
typedef mat<4, 4, float, highp> highp_mat4; | |
typedef mat<4, 4, float, lowp> lowp_mat4x4; | |
typedef mat<4, 4, float, mediump> mediump_mat4x4; | |
typedef mat<4, 4, float, highp> highp_mat4x4; | |
} | |
namespace glm { | |
namespace detail | |
{ | |
template<length_t C, length_t R, typename T, qualifier Q> | |
struct outerProduct_trait{}; | |
template<typename T, qualifier Q> | |
struct outerProduct_trait<2, 2, T, Q> | |
{ | |
typedef mat<2, 2, T, Q> type; | |
}; | |
template<typename T, qualifier Q> | |
struct outerProduct_trait<2, 3, T, Q> | |
{ | |
typedef mat<3, 2, T, Q> type; | |
}; | |
template<typename T, qualifier Q> | |
struct outerProduct_trait<2, 4, T, Q> | |
{ | |
typedef mat<4, 2, T, Q> type; | |
}; | |
template<typename T, qualifier Q> | |
struct outerProduct_trait<3, 2, T, Q> | |
{ | |
typedef mat<2, 3, T, Q> type; | |
}; | |
template<typename T, qualifier Q> | |
struct outerProduct_trait<3, 3, T, Q> | |
{ | |
typedef mat<3, 3, T, Q> type; | |
}; | |
template<typename T, qualifier Q> | |
struct outerProduct_trait<3, 4, T, Q> | |
{ | |
typedef mat<4, 3, T, Q> type; | |
}; | |
template<typename T, qualifier Q> | |
struct outerProduct_trait<4, 2, T, Q> | |
{ | |
typedef mat<2, 4, T, Q> type; | |
}; | |
template<typename T, qualifier Q> | |
struct outerProduct_trait<4, 3, T, Q> | |
{ | |
typedef mat<3, 4, T, Q> type; | |
}; | |
template<typename T, qualifier Q> | |
struct outerProduct_trait<4, 4, T, Q> | |
{ | |
typedef mat<4, 4, T, Q> type; | |
}; | |
} | |
# 17021 "glm-amalgamated/glm.h" | |
template<length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_DECL mat<C, R, T, Q> matrixCompMult(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y); | |
# 17035 "glm-amalgamated/glm.h" | |
template<length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_DECL typename detail::outerProduct_trait<C, R, T, Q>::type outerProduct(vec<C, T, Q> const& c, vec<R, T, Q> const& r); | |
# 17047 "glm-amalgamated/glm.h" | |
template<length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_DECL typename mat<C, R, T, Q>::transpose_type transpose(mat<C, R, T, Q> const& x); | |
# 17059 "glm-amalgamated/glm.h" | |
template<length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_DECL T determinant(mat<C, R, T, Q> const& m); | |
# 17071 "glm-amalgamated/glm.h" | |
template<length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_DECL mat<C, R, T, Q> inverse(mat<C, R, T, Q> const& m); | |
} | |
# 17090 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
# 17102 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL T length(vec<L, T, Q> const& x); | |
# 17112 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL T distance(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1); | |
# 17122 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL T dot(vec<L, T, Q> const& x, vec<L, T, Q> const& y); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y); | |
# 17142 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> normalize(vec<L, T, Q> const& x); | |
# 17152 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> faceforward( | |
vec<L, T, Q> const& N, | |
vec<L, T, Q> const& I, | |
vec<L, T, Q> const& Nref); | |
# 17166 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> reflect( | |
vec<L, T, Q> const& I, | |
vec<L, T, Q> const& N); | |
# 17180 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> refract( | |
vec<L, T, Q> const& I, | |
vec<L, T, Q> const& N, | |
T eta); | |
} | |
# 17204 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
# 17215 "glm-amalgamated/glm.h" | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x); | |
# 17226 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> abs(vec<L, T, Q> const& x); | |
# 17237 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> sign(vec<L, T, Q> const& x); | |
# 17248 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> floor(vec<L, T, Q> const& x); | |
# 17260 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> trunc(vec<L, T, Q> const& x); | |
# 17275 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> round(vec<L, T, Q> const& x); | |
# 17289 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> roundEven(vec<L, T, Q> const& x); | |
# 17301 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> ceil(vec<L, T, Q> const& x); | |
template<typename genType> | |
GLM_FUNC_DECL genType fract(genType x); | |
# 17321 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> fract(vec<L, T, Q> const& x); | |
template<typename genType> | |
GLM_FUNC_DECL genType mod(genType x, genType y); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> mod(vec<L, T, Q> const& x, T y); | |
# 17339 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> mod(vec<L, T, Q> const& x, vec<L, T, Q> const& y); | |
# 17351 "glm-amalgamated/glm.h" | |
template<typename genType> | |
GLM_FUNC_DECL genType modf(genType x, genType& i); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y); | |
# 17371 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, T y); | |
# 17382 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, vec<L, T, Q> const& y); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y); | |
# 17402 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, T y); | |
# 17413 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y); | |
# 17423 "glm-amalgamated/glm.h" | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal); | |
# 17435 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, T minVal, T maxVal); | |
# 17447 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal); | |
# 17492 "glm-amalgamated/glm.h" | |
template<typename genTypeT, typename genTypeU> | |
GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a); | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a); | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U a); | |
template<typename genType> | |
GLM_FUNC_DECL genType step(genType edge, genType x); | |
# 17516 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> step(T edge, vec<L, T, Q> const& x); | |
# 17527 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> step(vec<L, T, Q> const& edge, vec<L, T, Q> const& x); | |
# 17544 "glm-amalgamated/glm.h" | |
template<typename genType> | |
GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> smoothstep(T edge0, T edge1, vec<L, T, Q> const& x); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> smoothstep(vec<L, T, Q> const& edge0, vec<L, T, Q> const& edge1, vec<L, T, Q> const& x); | |
# 17567 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, bool, Q> isnan(vec<L, T, Q> const& x); | |
# 17582 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, bool, Q> isinf(vec<L, T, Q> const& x); | |
GLM_FUNC_DECL int floatBitsToInt(float const& v); | |
# 17602 "glm-amalgamated/glm.h" | |
template<length_t L, qualifier Q> | |
GLM_FUNC_DECL vec<L, int, Q> floatBitsToInt(vec<L, float, Q> const& v); | |
GLM_FUNC_DECL uint floatBitsToUint(float const& v); | |
# 17622 "glm-amalgamated/glm.h" | |
template<length_t L, qualifier Q> | |
GLM_FUNC_DECL vec<L, uint, Q> floatBitsToUint(vec<L, float, Q> const& v); | |
# 17633 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL float intBitsToFloat(int const& v); | |
# 17646 "glm-amalgamated/glm.h" | |
template<length_t L, qualifier Q> | |
GLM_FUNC_DECL vec<L, float, Q> intBitsToFloat(vec<L, int, Q> const& v); | |
# 17657 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL float uintBitsToFloat(uint const& v); | |
# 17670 "glm-amalgamated/glm.h" | |
template<length_t L, qualifier Q> | |
GLM_FUNC_DECL vec<L, float, Q> uintBitsToFloat(vec<L, uint, Q> const& v); | |
template<typename genType> | |
GLM_FUNC_DECL genType fma(genType const& a, genType const& b, genType const& c); | |
# 17696 "glm-amalgamated/glm.h" | |
template<typename genType> | |
GLM_FUNC_DECL genType frexp(genType x, int& exp); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> frexp(vec<L, T, Q> const& v, vec<L, int, Q>& exp); | |
# 17713 "glm-amalgamated/glm.h" | |
template<typename genType> | |
GLM_FUNC_DECL genType ldexp(genType const& x, int const& exp); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> ldexp(vec<L, T, Q> const& v, vec<L, int, Q> const& exp); | |
} | |
namespace glm{ | |
namespace detail | |
{ | |
template<typename genFIType, bool > | |
struct compute_abs | |
{}; | |
template<typename genFIType> | |
struct compute_abs<genFIType, true> | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x) | |
{ | |
GLM_STATIC_ASSERT( | |
std::numeric_limits<genFIType>::is_iec559 || std::numeric_limits<genFIType>::is_signed, | |
"'abs' only accept floating-point and integer scalar or vector inputs"); | |
return x >= genFIType(0) ? x : -x; | |
} | |
}; | |
#if GLM_COMPILER & GLM_COMPILER_CUDA | |
template<> | |
struct compute_abs<float, true> | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static float call(float x) | |
{ | |
return fabsf(x); | |
} | |
}; | |
#endif | |
template<typename genFIType> | |
struct compute_abs<genFIType, false> | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x) | |
{ | |
GLM_STATIC_ASSERT( | |
(!std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer), | |
"'abs' only accept floating-point and integer scalar or vector inputs"); | |
return x; | |
} | |
}; | |
} | |
} | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType min(genType x, genType y) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, "'min' only accept floating-point or integer inputs"); | |
return (y < x) ? y : x; | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType max(genType x, genType y) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, "'max' only accept floating-point or integer inputs"); | |
return (x < y) ? y : x; | |
} | |
template<> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR int abs(int x) | |
{ | |
int const y = x >> (sizeof(int) * 8 - 1); | |
return (x ^ y) - y; | |
} | |
# if GLM_HAS_CXX11_STL | |
using ::std::round; | |
# else | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType round(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'round' only accept floating-point inputs"); | |
return x < static_cast<genType>(0) ? static_cast<genType>(int(x - static_cast<genType>(0.5))) : static_cast<genType>(int(x + static_cast<genType>(0.5))); | |
} | |
# endif | |
# if GLM_HAS_CXX11_STL | |
using ::std::trunc; | |
# else | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType trunc(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'trunc' only accept floating-point inputs"); | |
return x < static_cast<genType>(0) ? -std::floor(-x) : std::floor(x); | |
} | |
# endif | |
} | |
namespace glm{ | |
namespace detail | |
{ | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_abs_vector | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<L, T, Q> call(vec<L, T, Q> const& x) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(abs, x); | |
} | |
}; | |
template<length_t L, typename T, typename U, qualifier Q, bool Aligned> | |
struct compute_mix_vector | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); | |
return vec<L, T, Q>(vec<L, U, Q>(x) * (static_cast<U>(1) - a) + vec<L, U, Q>(y) * a); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_mix_vector<L, T, bool, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, bool, Q> const& a) | |
{ | |
vec<L, T, Q> Result; | |
for(length_t i = 0; i < x.length(); ++i) | |
Result[i] = a[i] ? y[i] : x[i]; | |
return Result; | |
} | |
}; | |
template<length_t L, typename T, typename U, qualifier Q, bool Aligned> | |
struct compute_mix_scalar | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U const& a) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); | |
return vec<L, T, Q>(vec<L, U, Q>(x) * (static_cast<U>(1) - a) + vec<L, U, Q>(y) * a); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_mix_scalar<L, T, bool, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, bool const& a) | |
{ | |
return a ? y : x; | |
} | |
}; | |
template<typename T, typename U> | |
struct compute_mix | |
{ | |
GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, U const& a) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); | |
return static_cast<T>(static_cast<U>(x) * (static_cast<U>(1) - a) + static_cast<U>(y) * a); | |
} | |
}; | |
template<typename T> | |
struct compute_mix<T, bool> | |
{ | |
GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, bool const& a) | |
{ | |
return a ? y : x; | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool isFloat, bool Aligned> | |
struct compute_sign | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) | |
{ | |
return vec<L, T, Q>(glm::lessThan(vec<L, T, Q>(0), x)) - vec<L, T, Q>(glm::lessThan(x, vec<L, T, Q>(0))); | |
} | |
}; | |
# if GLM_ARCH == GLM_ARCH_X86 | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_sign<L, T, Q, false, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) | |
{ | |
T const Shift(static_cast<T>(sizeof(T) * 8 - 1)); | |
vec<L, T, Q> const y(vec<L, typename detail::make_unsigned<T>::type, Q>(-x) >> typename detail::make_unsigned<T>::type(Shift)); | |
return (x >> Shift) | y; | |
} | |
}; | |
# endif | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_floor | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(std::floor, x); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_ceil | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(std::ceil, x); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_fract | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) | |
{ | |
return x - floor(x); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_trunc | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(trunc, x); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_round | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(round, x); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_mod | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& a, vec<L, T, Q> const& b) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'mod' only accept floating-point inputs. Include <glm/gtc/integer.hpp> for integer inputs."); | |
return a - b * floor(a / b); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_min_vector | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y) | |
{ | |
return detail::functor2<vec, L, T, Q>::call(min, x, y); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_max_vector | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y) | |
{ | |
return detail::functor2<vec, L, T, Q>::call(max, x, y); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_clamp_vector | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal) | |
{ | |
return min(max(x, minVal), maxVal); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_step_vector | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& edge, vec<L, T, Q> const& x) | |
{ | |
return mix(vec<L, T, Q>(1), vec<L, T, Q>(0), glm::lessThan(x, edge)); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_smoothstep_vector | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& edge0, vec<L, T, Q> const& edge1, vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs"); | |
vec<L, T, Q> const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast<T>(0), static_cast<T>(1))); | |
return tmp * tmp * (static_cast<T>(3) - static_cast<T>(2) * tmp); | |
} | |
}; | |
} | |
template<typename genFIType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genFIType abs(genFIType x) | |
{ | |
return detail::compute_abs<genFIType, std::numeric_limits<genFIType>::is_signed>::call(x); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> abs(vec<L, T, Q> const& x) | |
{ | |
return detail::compute_abs_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x); | |
} | |
template<typename genFIType> | |
GLM_FUNC_QUALIFIER genFIType sign(genFIType x) | |
{ | |
GLM_STATIC_ASSERT( | |
std::numeric_limits<genFIType>::is_iec559 || (std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer), | |
"'sign' only accept signed inputs"); | |
return detail::compute_sign<1, genFIType, defaultp, | |
std::numeric_limits<genFIType>::is_iec559, detail::is_aligned<highp>::value>::call(vec<1, genFIType>(x)).x; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> sign(vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT( | |
std::numeric_limits<T>::is_iec559 || (std::numeric_limits<T>::is_signed && std::numeric_limits<T>::is_integer), | |
"'sign' only accept signed inputs"); | |
return detail::compute_sign<L, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(x); | |
} | |
using ::std::floor; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> floor(vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'floor' only accept floating-point inputs."); | |
return detail::compute_floor<L, T, Q, detail::is_aligned<Q>::value>::call(x); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> trunc(vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'trunc' only accept floating-point inputs"); | |
return detail::compute_trunc<L, T, Q, detail::is_aligned<Q>::value>::call(x); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> round(vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'round' only accept floating-point inputs"); | |
return detail::compute_round<L, T, Q, detail::is_aligned<Q>::value>::call(x); | |
} | |
# 18098 "glm-amalgamated/glm.h" | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType roundEven(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'roundEven' only accept floating-point inputs"); | |
int Integer = static_cast<int>(x); | |
genType IntegerPart = static_cast<genType>(Integer); | |
genType FractionalPart = fract(x); | |
if(FractionalPart > static_cast<genType>(0.5) || FractionalPart < static_cast<genType>(0.5)) | |
{ | |
return round(x); | |
} | |
else if((Integer % 2) == 0) | |
{ | |
return IntegerPart; | |
} | |
else if(x <= static_cast<genType>(0)) | |
{ | |
return IntegerPart - static_cast<genType>(1); | |
} | |
else | |
{ | |
return IntegerPart + static_cast<genType>(1); | |
} | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> roundEven(vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'roundEven' only accept floating-point inputs"); | |
return detail::functor1<vec, L, T, T, Q>::call(roundEven, x); | |
} | |
using ::std::ceil; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> ceil(vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'ceil' only accept floating-point inputs"); | |
return detail::compute_ceil<L, T, Q, detail::is_aligned<Q>::value>::call(x); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType fract(genType x) | |
{ | |
return fract(vec<1, genType>(x)).x; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fract(vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fract' only accept floating-point inputs"); | |
return detail::compute_fract<L, T, Q, detail::is_aligned<Q>::value>::call(x); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType mod(genType x, genType y) | |
{ | |
# if GLM_COMPILER & GLM_COMPILER_CUDA | |
vec<1, genType, defaultp> Result(mod(vec<1, genType, defaultp>(x), y)); | |
return Result.x; | |
# else | |
return mod(vec<1, genType, defaultp>(x), y).x; | |
# endif | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> mod(vec<L, T, Q> const& x, T y) | |
{ | |
return detail::compute_mod<L, T, Q, detail::is_aligned<Q>::value>::call(x, vec<L, T, Q>(y)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> mod(vec<L, T, Q> const& x, vec<L, T, Q> const& y) | |
{ | |
return detail::compute_mod<L, T, Q, detail::is_aligned<Q>::value>::call(x, y); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType modf(genType x, genType & i) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'modf' only accept floating-point inputs"); | |
return std::modf(x, &i); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<1, T, Q> modf(vec<1, T, Q> const& x, vec<1, T, Q> & i) | |
{ | |
return vec<1, T, Q>( | |
modf(x.x, i.x)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<2, T, Q> modf(vec<2, T, Q> const& x, vec<2, T, Q> & i) | |
{ | |
return vec<2, T, Q>( | |
modf(x.x, i.x), | |
modf(x.y, i.y)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> modf(vec<3, T, Q> const& x, vec<3, T, Q> & i) | |
{ | |
return vec<3, T, Q>( | |
modf(x.x, i.x), | |
modf(x.y, i.y), | |
modf(x.z, i.z)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, T, Q> modf(vec<4, T, Q> const& x, vec<4, T, Q> & i) | |
{ | |
return vec<4, T, Q>( | |
modf(x.x, i.x), | |
modf(x.y, i.y), | |
modf(x.z, i.z), | |
modf(x.w, i.w)); | |
} | |
# 18235 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, T b) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, "'min' only accept floating-point or integer inputs"); | |
return detail::compute_min_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, vec<L, T, Q>(b)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, vec<L, T, Q> const& b) | |
{ | |
return detail::compute_min_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, b); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& a, T b) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, "'max' only accept floating-point or integer inputs"); | |
return detail::compute_max_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, vec<L, T, Q>(b)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& a, vec<L, T, Q> const& b) | |
{ | |
return detail::compute_max_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, b); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, "'clamp' only accept floating-point or integer inputs"); | |
return min(max(x, minVal), maxVal); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, T minVal, T maxVal) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, "'clamp' only accept floating-point or integer inputs"); | |
return detail::compute_clamp_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x, vec<L, T, Q>(minVal), vec<L, T, Q>(maxVal)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, "'clamp' only accept floating-point or integer inputs"); | |
return detail::compute_clamp_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x, minVal, maxVal); | |
} | |
template<typename genTypeT, typename genTypeU> | |
GLM_FUNC_QUALIFIER genTypeT mix(genTypeT x, genTypeT y, genTypeU a) | |
{ | |
return detail::compute_mix<genTypeT, genTypeU>::call(x, y, a); | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U a) | |
{ | |
return detail::compute_mix_scalar<L, T, U, Q, detail::is_aligned<Q>::value>::call(x, y, a); | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a) | |
{ | |
return detail::compute_mix_vector<L, T, U, Q, detail::is_aligned<Q>::value>::call(x, y, a); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType step(genType edge, genType x) | |
{ | |
return mix(static_cast<genType>(1), static_cast<genType>(0), x < edge); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> step(T edge, vec<L, T, Q> const& x) | |
{ | |
return detail::compute_step_vector<L, T, Q, detail::is_aligned<Q>::value>::call(vec<L, T, Q>(edge), x); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> step(vec<L, T, Q> const& edge, vec<L, T, Q> const& x) | |
{ | |
return detail::compute_step_vector<L, T, Q, detail::is_aligned<Q>::value>::call(edge, x); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType smoothstep(genType edge0, genType edge1, genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs"); | |
genType const tmp(clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1))); | |
return tmp * tmp * (genType(3) - genType(2) * tmp); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> smoothstep(T edge0, T edge1, vec<L, T, Q> const& x) | |
{ | |
return detail::compute_smoothstep_vector<L, T, Q, detail::is_aligned<Q>::value>::call(vec<L, T, Q>(edge0), vec<L, T, Q>(edge1), x); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> smoothstep(vec<L, T, Q> const& edge0, vec<L, T, Q> const& edge1, vec<L, T, Q> const& x) | |
{ | |
return detail::compute_smoothstep_vector<L, T, Q, detail::is_aligned<Q>::value>::call(edge0, edge1, x); | |
} | |
# if GLM_HAS_CXX11_STL | |
using std::isnan; | |
# else | |
template<typename genType> | |
GLM_FUNC_QUALIFIER bool isnan(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'isnan' only accept floating-point inputs"); | |
# if GLM_HAS_CXX11_STL | |
return std::isnan(x); | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
return _isnan(x) != 0; | |
# elif GLM_COMPILER & GLM_COMPILER_INTEL | |
# if GLM_PLATFORM & GLM_PLATFORM_WINDOWS | |
return _isnan(x) != 0; | |
# else | |
return ::isnan(x) != 0; | |
# endif | |
# elif (GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) && (GLM_PLATFORM & GLM_PLATFORM_ANDROID) && __cplusplus < 201103L | |
return _isnan(x) != 0; | |
# elif GLM_COMPILER & GLM_COMPILER_CUDA | |
return ::isnan(x) != 0; | |
# else | |
return std::isnan(x); | |
# endif | |
} | |
# endif | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, bool, Q> isnan(vec<L, T, Q> const& v) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isnan' only accept floating-point inputs"); | |
vec<L, bool, Q> Result; | |
for (length_t l = 0; l < v.length(); ++l) | |
Result[l] = glm::isnan(v[l]); | |
return Result; | |
} | |
# if GLM_HAS_CXX11_STL | |
using std::isinf; | |
# else | |
template<typename genType> | |
GLM_FUNC_QUALIFIER bool isinf(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'isinf' only accept floating-point inputs"); | |
# if GLM_HAS_CXX11_STL | |
return std::isinf(x); | |
# elif GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC) | |
# if(GLM_PLATFORM & GLM_PLATFORM_WINDOWS) | |
return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; | |
# else | |
return ::isinf(x); | |
# endif | |
# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) | |
# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L) | |
return _isinf(x) != 0; | |
# else | |
return std::isinf(x); | |
# endif | |
# elif GLM_COMPILER & GLM_COMPILER_CUDA | |
return ::isinf(double(x)) != 0; | |
# else | |
return std::isinf(x); | |
# endif | |
} | |
# endif | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, bool, Q> isinf(vec<L, T, Q> const& v) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isinf' only accept floating-point inputs"); | |
vec<L, bool, Q> Result; | |
for (length_t l = 0; l < v.length(); ++l) | |
Result[l] = glm::isinf(v[l]); | |
return Result; | |
} | |
GLM_FUNC_QUALIFIER int floatBitsToInt(float const& v) | |
{ | |
union | |
{ | |
float in; | |
int out; | |
} u; | |
u.in = v; | |
return u.out; | |
} | |
template<length_t L, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, int, Q> floatBitsToInt(vec<L, float, Q> const& v) | |
{ | |
return reinterpret_cast<vec<L, int, Q>&>(const_cast<vec<L, float, Q>&>(v)); | |
} | |
GLM_FUNC_QUALIFIER uint floatBitsToUint(float const& v) | |
{ | |
union | |
{ | |
float in; | |
uint out; | |
} u; | |
u.in = v; | |
return u.out; | |
} | |
template<length_t L, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, uint, Q> floatBitsToUint(vec<L, float, Q> const& v) | |
{ | |
return reinterpret_cast<vec<L, uint, Q>&>(const_cast<vec<L, float, Q>&>(v)); | |
} | |
GLM_FUNC_QUALIFIER float intBitsToFloat(int const& v) | |
{ | |
union | |
{ | |
int in; | |
float out; | |
} u; | |
u.in = v; | |
return u.out; | |
} | |
template<length_t L, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, float, Q> intBitsToFloat(vec<L, int, Q> const& v) | |
{ | |
return reinterpret_cast<vec<L, float, Q>&>(const_cast<vec<L, int, Q>&>(v)); | |
} | |
GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const& v) | |
{ | |
union | |
{ | |
uint in; | |
float out; | |
} u; | |
u.in = v; | |
return u.out; | |
} | |
template<length_t L, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, float, Q> uintBitsToFloat(vec<L, uint, Q> const& v) | |
{ | |
return reinterpret_cast<vec<L, float, Q>&>(const_cast<vec<L, uint, Q>&>(v)); | |
} | |
# if GLM_HAS_CXX11_STL | |
using std::fma; | |
# else | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType fma(genType const& a, genType const& b, genType const& c) | |
{ | |
return a * b + c; | |
} | |
# endif | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType frexp(genType x, int& exp) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'frexp' only accept floating-point inputs"); | |
return std::frexp(x, &exp); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> frexp(vec<L, T, Q> const& v, vec<L, int, Q>& exp) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'frexp' only accept floating-point inputs"); | |
vec<L, T, Q> Result; | |
for (length_t l = 0; l < v.length(); ++l) | |
Result[l] = std::frexp(v[l], &exp[l]); | |
return Result; | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType ldexp(genType const& x, int const& exp) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'ldexp' only accept floating-point inputs"); | |
return std::ldexp(x, exp); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> ldexp(vec<L, T, Q> const& v, vec<L, int, Q> const& exp) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'ldexp' only accept floating-point inputs"); | |
vec<L, T, Q> Result; | |
for (length_t l = 0; l < v.length(); ++l) | |
Result[l] = std::ldexp(v[l], exp[l]); | |
return Result; | |
} | |
} | |
#if GLM_CONFIG_SIMD == GLM_ENABLE | |
# include "func_common_simd.inl" | |
#endif | |
namespace glm{ | |
namespace detail | |
{ | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_length | |
{ | |
GLM_FUNC_QUALIFIER static T call(vec<L, T, Q> const& v) | |
{ | |
return sqrt(dot(v, v)); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_distance | |
{ | |
GLM_FUNC_QUALIFIER static T call(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1) | |
{ | |
return length(p1 - p0); | |
} | |
}; | |
template<typename V, typename T, bool Aligned> | |
struct compute_dot{}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_dot<vec<1, T, Q>, T, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static T call(vec<1, T, Q> const& a, vec<1, T, Q> const& b) | |
{ | |
return a.x * b.x; | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_dot<vec<2, T, Q>, T, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static T call(vec<2, T, Q> const& a, vec<2, T, Q> const& b) | |
{ | |
vec<2, T, Q> tmp(a * b); | |
return tmp.x + tmp.y; | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_dot<vec<3, T, Q>, T, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static T call(vec<3, T, Q> const& a, vec<3, T, Q> const& b) | |
{ | |
vec<3, T, Q> tmp(a * b); | |
return tmp.x + tmp.y + tmp.z; | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_dot<vec<4, T, Q>, T, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static T call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) | |
{ | |
vec<4, T, Q> tmp(a * b); | |
return (tmp.x + tmp.y) + (tmp.z + tmp.w); | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_cross | |
{ | |
GLM_FUNC_QUALIFIER static vec<3, T, Q> call(vec<3, T, Q> const& x, vec<3, T, Q> const& y) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'cross' accepts only floating-point inputs"); | |
return vec<3, T, Q>( | |
x.y * y.z - y.y * x.z, | |
x.z * y.x - y.z * x.x, | |
x.x * y.y - y.x * x.y); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_normalize | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'normalize' accepts only floating-point inputs"); | |
return v * inversesqrt(dot(v, v)); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_faceforward | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& N, vec<L, T, Q> const& I, vec<L, T, Q> const& Nref) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'normalize' accepts only floating-point inputs"); | |
return dot(Nref, I) < static_cast<T>(0) ? N : -N; | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_reflect | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& I, vec<L, T, Q> const& N) | |
{ | |
return I - N * dot(N, I) * static_cast<T>(2); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_refract | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& I, vec<L, T, Q> const& N, T eta) | |
{ | |
T const dotValue(dot(N, I)); | |
T const k(static_cast<T>(1) - eta * eta * (static_cast<T>(1) - dotValue * dotValue)); | |
vec<L, T, Q> const Result = | |
(k >= static_cast<T>(0)) ? (eta * I - (eta * dotValue + std::sqrt(k)) * N) : vec<L, T, Q>(0); | |
return Result; | |
} | |
}; | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType length(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'length' accepts only floating-point inputs"); | |
return abs(x); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T length(vec<L, T, Q> const& v) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'length' accepts only floating-point inputs"); | |
return detail::compute_length<L, T, Q, detail::is_aligned<Q>::value>::call(v); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType distance(genType const& p0, genType const& p1) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'distance' accepts only floating-point inputs"); | |
return length(p1 - p0); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T distance(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1) | |
{ | |
return detail::compute_distance<L, T, Q, detail::is_aligned<Q>::value>::call(p0, p1); | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER T dot(T x, T y) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs"); | |
return x * y; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T dot(vec<L, T, Q> const& x, vec<L, T, Q> const& y) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs"); | |
return detail::compute_dot<vec<L, T, Q>, T, detail::is_aligned<Q>::value>::call(x, y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y) | |
{ | |
return detail::compute_cross<T, Q, detail::is_aligned<Q>::value>::call(x, y); | |
} | |
# 18739 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> normalize(vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'normalize' accepts only floating-point inputs"); | |
return detail::compute_normalize<L, T, Q, detail::is_aligned<Q>::value>::call(x); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType faceforward(genType const& N, genType const& I, genType const& Nref) | |
{ | |
return dot(Nref, I) < static_cast<genType>(0) ? N : -N; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> faceforward(vec<L, T, Q> const& N, vec<L, T, Q> const& I, vec<L, T, Q> const& Nref) | |
{ | |
return detail::compute_faceforward<L, T, Q, detail::is_aligned<Q>::value>::call(N, I, Nref); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType reflect(genType const& I, genType const& N) | |
{ | |
return I - N * dot(N, I) * genType(2); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> reflect(vec<L, T, Q> const& I, vec<L, T, Q> const& N) | |
{ | |
return detail::compute_reflect<L, T, Q, detail::is_aligned<Q>::value>::call(I, N); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType refract(genType const& I, genType const& N, genType eta) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'refract' accepts only floating-point inputs"); | |
genType const dotValue(dot(N, I)); | |
genType const k(static_cast<genType>(1) - eta * eta * (static_cast<genType>(1) - dotValue * dotValue)); | |
return (eta * I - (eta * dotValue + sqrt(k)) * N) * static_cast<genType>(k >= static_cast<genType>(0)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> refract(vec<L, T, Q> const& I, vec<L, T, Q> const& N, T eta) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'refract' accepts only floating-point inputs"); | |
return detail::compute_refract<L, T, Q, detail::is_aligned<Q>::value>::call(I, N, eta); | |
} | |
} | |
#if GLM_CONFIG_SIMD == GLM_ENABLE | |
# include "func_geometric_simd.inl" | |
#endif | |
namespace glm{ | |
namespace detail | |
{ | |
template<length_t C, length_t R, typename T, qualifier Q, bool Aligned> | |
struct compute_matrixCompMult | |
{ | |
GLM_FUNC_QUALIFIER static mat<C, R, T, Q> call(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y) | |
{ | |
mat<C, R, T, Q> Result; | |
for(length_t i = 0; i < Result.length(); ++i) | |
Result[i] = x[i] * y[i]; | |
return Result; | |
} | |
}; | |
template<length_t C, length_t R, typename T, qualifier Q, bool Aligned> | |
struct compute_transpose{}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_transpose<2, 2, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m) | |
{ | |
mat<2, 2, T, Q> Result; | |
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, qualifier Q, bool Aligned> | |
struct compute_transpose<2, 3, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static mat<3, 2, T, Q> call(mat<2, 3, T, Q> const& m) | |
{ | |
mat<3,2, T, Q> Result; | |
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, qualifier Q, bool Aligned> | |
struct compute_transpose<2, 4, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static mat<4, 2, T, Q> call(mat<2, 4, T, Q> const& m) | |
{ | |
mat<4, 2, T, Q> Result; | |
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, qualifier Q, bool Aligned> | |
struct compute_transpose<3, 2, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static mat<2, 3, T, Q> call(mat<3, 2, T, Q> const& m) | |
{ | |
mat<2, 3, T, Q> Result; | |
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]; | |
return Result; | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_transpose<3, 3, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m) | |
{ | |
mat<3, 3, T, Q> Result; | |
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[2][0] = m[0][2]; | |
Result[2][1] = m[1][2]; | |
Result[2][2] = m[2][2]; | |
return Result; | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_transpose<3, 4, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static mat<4, 3, T, Q> call(mat<3, 4, T, Q> const& m) | |
{ | |
mat<4, 3, T, Q> Result; | |
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[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][2] = m[2][3]; | |
return Result; | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_transpose<4, 2, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static mat<2, 4, T, Q> call(mat<4, 2, T, Q> const& m) | |
{ | |
mat<2, 4, T, Q> Result; | |
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]; | |
return Result; | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_transpose<4, 3, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static mat<3, 4, T, Q> call(mat<4, 3, T, Q> const& m) | |
{ | |
mat<3, 4, T, Q> Result; | |
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[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, qualifier Q, bool Aligned> | |
struct compute_transpose<4, 4, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m) | |
{ | |
mat<4, 4, T, Q> Result; | |
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[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; | |
} | |
}; | |
template<length_t C, length_t R, typename T, qualifier Q, bool Aligned> | |
struct compute_determinant{}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_determinant<2, 2, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static T call(mat<2, 2, T, Q> const& m) | |
{ | |
return m[0][0] * m[1][1] - m[1][0] * m[0][1]; | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_determinant<3, 3, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static T call(mat<3, 3, T, Q> const& m) | |
{ | |
return | |
+ m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) | |
- m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) | |
+ m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_determinant<4, 4, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static T call(mat<4, 4, T, Q> const& m) | |
{ | |
T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; | |
T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; | |
T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; | |
T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; | |
T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; | |
T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; | |
vec<4, T, Q> DetCof( | |
+ (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), | |
- (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), | |
+ (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), | |
- (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]; | |
} | |
}; | |
template<length_t C, length_t R, typename T, qualifier Q, bool Aligned> | |
struct compute_inverse{}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_inverse<2, 2, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m) | |
{ | |
T OneOverDeterminant = static_cast<T>(1) / ( | |
+ m[0][0] * m[1][1] | |
- m[1][0] * m[0][1]); | |
mat<2, 2, T, Q> Inverse( | |
+ m[1][1] * OneOverDeterminant, | |
- m[0][1] * OneOverDeterminant, | |
- m[1][0] * OneOverDeterminant, | |
+ m[0][0] * OneOverDeterminant); | |
return Inverse; | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_inverse<3, 3, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m) | |
{ | |
T OneOverDeterminant = static_cast<T>(1) / ( | |
+ m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) | |
- m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) | |
+ m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2])); | |
mat<3, 3, T, Q> Inverse; | |
Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]) * OneOverDeterminant; | |
Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]) * OneOverDeterminant; | |
Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]) * OneOverDeterminant; | |
Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]) * OneOverDeterminant; | |
Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]) * OneOverDeterminant; | |
Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]) * OneOverDeterminant; | |
Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]) * OneOverDeterminant; | |
Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]) * OneOverDeterminant; | |
Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]) * OneOverDeterminant; | |
return Inverse; | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_inverse<4, 4, T, Q, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m) | |
{ | |
T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; | |
T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; | |
T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; | |
T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; | |
T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; | |
T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; | |
T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; | |
T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; | |
T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; | |
T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; | |
T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; | |
T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; | |
T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; | |
T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; | |
T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; | |
T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; | |
T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; | |
T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; | |
vec<4, T, Q> Fac0(Coef00, Coef00, Coef02, Coef03); | |
vec<4, T, Q> Fac1(Coef04, Coef04, Coef06, Coef07); | |
vec<4, T, Q> Fac2(Coef08, Coef08, Coef10, Coef11); | |
vec<4, T, Q> Fac3(Coef12, Coef12, Coef14, Coef15); | |
vec<4, T, Q> Fac4(Coef16, Coef16, Coef18, Coef19); | |
vec<4, T, Q> Fac5(Coef20, Coef20, Coef22, Coef23); | |
vec<4, T, Q> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]); | |
vec<4, T, Q> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]); | |
vec<4, T, Q> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]); | |
vec<4, T, Q> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]); | |
vec<4, T, Q> Inv0(Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2); | |
vec<4, T, Q> Inv1(Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4); | |
vec<4, T, Q> Inv2(Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5); | |
vec<4, T, Q> Inv3(Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5); | |
vec<4, T, Q> SignA(+1, -1, +1, -1); | |
vec<4, T, Q> SignB(-1, +1, -1, +1); | |
mat<4, 4, T, Q> Inverse(Inv0 * SignA, Inv1 * SignB, Inv2 * SignA, Inv3 * SignB); | |
vec<4, T, Q> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]); | |
vec<4, T, Q> Dot0(m[0] * Row0); | |
T Dot1 = (Dot0.x + Dot0.y) + (Dot0.z + Dot0.w); | |
T OneOverDeterminant = static_cast<T>(1) / Dot1; | |
return Inverse * OneOverDeterminant; | |
} | |
}; | |
} | |
template<length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<C, R, T, Q> matrixCompMult(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'matrixCompMult' only accept floating-point inputs"); | |
return detail::compute_matrixCompMult<C, R, T, Q, detail::is_aligned<Q>::value>::call(x, y); | |
} | |
template<length_t DA, length_t DB, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename detail::outerProduct_trait<DA, DB, T, Q>::type outerProduct(vec<DA, T, Q> const& c, vec<DB, T, Q> const& r) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'outerProduct' only accept floating-point inputs"); | |
typename detail::outerProduct_trait<DA, DB, T, Q>::type m; | |
for(length_t i = 0; i < m.length(); ++i) | |
m[i] = c * r[i]; | |
return m; | |
} | |
template<length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<C, R, T, Q>::transpose_type transpose(mat<C, R, T, Q> const& m) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'transpose' only accept floating-point inputs"); | |
return detail::compute_transpose<C, R, T, Q, detail::is_aligned<Q>::value>::call(m); | |
} | |
template<length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T determinant(mat<C, R, T, Q> const& m) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'determinant' only accept floating-point inputs"); | |
return detail::compute_determinant<C, R, T, Q, detail::is_aligned<Q>::value>::call(m); | |
} | |
template<length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<C, R, T, Q> inverse(mat<C, R, T, Q> const& m) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'inverse' only accept floating-point inputs"); | |
return detail::compute_inverse<C, R, T, Q, detail::is_aligned<Q>::value>::call(m); | |
} | |
} | |
#if GLM_CONFIG_SIMD == GLM_ENABLE | |
# include "func_matrix_simd.inl" | |
#endif | |
namespace glm | |
{ | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat() | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST | |
: value{col_type(1, 0), col_type(0, 1)} | |
# endif | |
{ | |
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION | |
this->value[0] = col_type(1, 0); | |
this->value[1] = col_type(0, 1); | |
# endif | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, T, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{m[0], m[1]} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(T scalar) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(scalar, 0), col_type(0, scalar)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(scalar, 0); | |
this->value[1] = col_type(0, scalar); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat | |
( | |
T const& x0, T const& y0, | |
T const& x1, T const& y1 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(x0, y0), col_type(x1, y1)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(x0, y0); | |
this->value[1] = col_type(x1, y1); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(col_type const& v0, col_type const& v1) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{v0, v1} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = v0; | |
this->value[1] = v1; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename X1, typename Y1, typename X2, typename Y2> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat | |
( | |
X1 const& x1, Y1 const& y1, | |
X2 const& x2, Y2 const& y2 | |
) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(static_cast<T>(x1), value_type(y1)), col_type(static_cast<T>(x2), value_type(y2)) } | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(static_cast<T>(x1), value_type(y1)); | |
this->value[1] = col_type(static_cast<T>(x2), value_type(y2)); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename V1, typename V2> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(v1), col_type(v2)} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(v1); | |
this->value[1] = col_type(v2); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, U, P> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) | |
# if GLM_HAS_INITIALIZER_LISTS | |
: value{col_type(m[0]), col_type(m[1])} | |
# endif | |
{ | |
# if !GLM_HAS_INITIALIZER_LISTS | |
this->value[0] = col_type(m[0]); | |
this->value[1] = col_type(m[1]); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 2, T, Q>::col_type const& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) const | |
{ | |
assert(i < this->length()); | |
return this->value[i]; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator=(mat<2, 2, U, Q> const& m) | |
{ | |
this->value[0] = m[0]; | |
this->value[1] = m[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(U scalar) | |
{ | |
this->value[0] += scalar; | |
this->value[1] += scalar; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(mat<2, 2, U, Q> const& m) | |
{ | |
this->value[0] += m[0]; | |
this->value[1] += m[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(U scalar) | |
{ | |
this->value[0] -= scalar; | |
this->value[1] -= scalar; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(mat<2, 2, U, Q> const& m) | |
{ | |
this->value[0] -= m[0]; | |
this->value[1] -= m[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(U scalar) | |
{ | |
this->value[0] *= scalar; | |
this->value[1] *= scalar; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(mat<2, 2, U, Q> const& m) | |
{ | |
return (*this = *this * m); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(U scalar) | |
{ | |
this->value[0] /= scalar; | |
this->value[1] /= scalar; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(mat<2, 2, U, Q> const& m) | |
{ | |
return *this *= inverse(m); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator++() | |
{ | |
++this->value[0]; | |
++this->value[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator--() | |
{ | |
--this->value[0]; | |
--this->value[1]; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator++(int) | |
{ | |
mat<2, 2, T, Q> Result(*this); | |
++*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator--(int) | |
{ | |
mat<2, 2, T, Q> Result(*this); | |
--*this; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m) | |
{ | |
return m; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m) | |
{ | |
return mat<2, 2, T, Q>( | |
-m[0], | |
-m[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar) | |
{ | |
return mat<2, 2, T, Q>( | |
m[0] + scalar, | |
m[1] + scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m) | |
{ | |
return mat<2, 2, T, Q>( | |
m[0] + scalar, | |
m[1] + scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) | |
{ | |
return mat<2, 2, T, Q>( | |
m1[0] + m2[0], | |
m1[1] + m2[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar) | |
{ | |
return mat<2, 2, T, Q>( | |
m[0] - scalar, | |
m[1] - scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m) | |
{ | |
return mat<2, 2, T, Q>( | |
scalar - m[0], | |
scalar - m[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) | |
{ | |
return mat<2, 2, T, Q>( | |
m1[0] - m2[0], | |
m1[1] - m2[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar) | |
{ | |
return mat<2, 2, T, Q>( | |
m[0] * scalar, | |
m[1] * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m) | |
{ | |
return mat<2, 2, T, Q>( | |
m[0] * scalar, | |
m[1] * scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator* | |
( | |
mat<2, 2, T, Q> const& m, | |
typename mat<2, 2, T, Q>::row_type const& v | |
) | |
{ | |
return vec<2, T, Q>( | |
m[0][0] * v.x + m[1][0] * v.y, | |
m[0][1] * v.x + m[1][1] * v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator* | |
( | |
typename mat<2, 2, T, Q>::col_type const& v, | |
mat<2, 2, T, Q> const& m | |
) | |
{ | |
return vec<2, T, Q>( | |
v.x * m[0][0] + v.y * m[0][1], | |
v.x * m[1][0] + v.y * m[1][1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) | |
{ | |
return mat<2, 2, T, Q>( | |
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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) | |
{ | |
return mat<3, 2, T, Q>( | |
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], | |
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], | |
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) | |
{ | |
return mat<4, 2, T, Q>( | |
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], | |
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], | |
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], | |
m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1], | |
m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar) | |
{ | |
return mat<2, 2, T, Q>( | |
m[0] / scalar, | |
m[1] / scalar); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m) | |
{ | |
return mat<2, 2, T, Q>( | |
scalar / m[0], | |
scalar / m[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v) | |
{ | |
return inverse(m) * v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m) | |
{ | |
return v * inverse(m); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) | |
{ | |
mat<2, 2, T, Q> m1_copy(m1); | |
return m1_copy /= m2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) | |
{ | |
return (m1[0] == m2[0]) && (m1[1] == m2[1]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) | |
{ | |
return (m1[0] != m2[0]) || (m1[1] != m2[1]); | |
} | |
} | |
#endif | |
namespace glm | |
{ | |
typedef mat<2, 2, double, defaultp> dmat2x2; | |
typedef mat<2, 2, double, defaultp> dmat2; | |
} | |
namespace glm | |
{ | |
typedef mat<2, 2, double, lowp> lowp_dmat2; | |
typedef mat<2, 2, double, mediump> mediump_dmat2; | |
typedef mat<2, 2, double, highp> highp_dmat2; | |
typedef mat<2, 2, double, lowp> lowp_dmat2x2; | |
typedef mat<2, 2, double, mediump> mediump_dmat2x2; | |
typedef mat<2, 2, double, highp> highp_dmat2x2; | |
} | |
namespace glm | |
{ | |
typedef mat<2, 2, float, defaultp> mat2x2; | |
typedef mat<2, 2, float, defaultp> mat2; | |
} | |
namespace glm | |
{ | |
typedef mat<2, 2, float, lowp> lowp_mat2; | |
typedef mat<2, 2, float, mediump> mediump_mat2; | |
typedef mat<2, 2, float, highp> highp_mat2; | |
typedef mat<2, 2, float, lowp> lowp_mat2x2; | |
typedef mat<2, 2, float, mediump> mediump_mat2x2; | |
typedef mat<2, 2, float, highp> highp_mat2x2; | |
} | |
# 19880 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
# 19893 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> radians(vec<L, T, Q> const& degrees); | |
# 19904 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> degrees(vec<L, T, Q> const& radians); | |
# 19916 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> sin(vec<L, T, Q> const& angle); | |
# 19928 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> cos(vec<L, T, Q> const& angle); | |
# 19939 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> tan(vec<L, T, Q> const& angle); | |
# 19952 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> asin(vec<L, T, Q> const& x); | |
# 19965 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> acos(vec<L, T, Q> const& x); | |
# 19980 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> atan(vec<L, T, Q> const& y, vec<L, T, Q> const& x); | |
# 19992 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> atan(vec<L, T, Q> const& y_over_x); | |
# 20003 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> sinh(vec<L, T, Q> const& angle); | |
# 20014 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> cosh(vec<L, T, Q> const& angle); | |
# 20025 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> tanh(vec<L, T, Q> const& angle); | |
# 20036 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> asinh(vec<L, T, Q> const& x); | |
# 20048 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> acosh(vec<L, T, Q> const& x); | |
# 20060 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> atanh(vec<L, T, Q> const& x); | |
} | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType radians(genType degrees) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'radians' only accept floating-point input"); | |
return degrees * static_cast<genType>(0.01745329251994329576923690768489); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> radians(vec<L, T, Q> const& v) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(radians, v); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType degrees(genType radians) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'degrees' only accept floating-point input"); | |
return radians * static_cast<genType>(57.295779513082320876798154814105); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> degrees(vec<L, T, Q> const& v) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(degrees, v); | |
} | |
using ::std::sin; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> sin(vec<L, T, Q> const& v) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(sin, v); | |
} | |
using std::cos; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> cos(vec<L, T, Q> const& v) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(cos, v); | |
} | |
using std::tan; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> tan(vec<L, T, Q> const& v) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(tan, v); | |
} | |
using std::asin; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> asin(vec<L, T, Q> const& v) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(asin, v); | |
} | |
using std::acos; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> acos(vec<L, T, Q> const& v) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(acos, v); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType atan(genType y, genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'atan' only accept floating-point input"); | |
return ::std::atan2(y, x); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> atan(vec<L, T, Q> const& a, vec<L, T, Q> const& b) | |
{ | |
return detail::functor2<vec, L, T, Q>::call(::std::atan2, a, b); | |
} | |
using std::atan; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> atan(vec<L, T, Q> const& v) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(atan, v); | |
} | |
using std::sinh; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> sinh(vec<L, T, Q> const& v) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(sinh, v); | |
} | |
using std::cosh; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> cosh(vec<L, T, Q> const& v) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(cosh, v); | |
} | |
using std::tanh; | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> tanh(vec<L, T, Q> const& v) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(tanh, v); | |
} | |
# if GLM_HAS_CXX11_STL | |
using std::asinh; | |
# else | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType asinh(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'asinh' only accept floating-point input"); | |
return (x < static_cast<genType>(0) ? static_cast<genType>(-1) : (x > static_cast<genType>(0) ? static_cast<genType>(1) : static_cast<genType>(0))) * log(std::abs(x) + sqrt(static_cast<genType>(1) + x * x)); | |
} | |
# endif | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> asinh(vec<L, T, Q> const& v) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(asinh, v); | |
} | |
# if GLM_HAS_CXX11_STL | |
using std::acosh; | |
# else | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType acosh(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'acosh' only accept floating-point input"); | |
if(x < static_cast<genType>(1)) | |
return static_cast<genType>(0); | |
return log(x + sqrt(x * x - static_cast<genType>(1))); | |
} | |
# endif | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> acosh(vec<L, T, Q> const& v) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(acosh, v); | |
} | |
# if GLM_HAS_CXX11_STL | |
using std::atanh; | |
# else | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType atanh(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'atanh' only accept floating-point input"); | |
if(std::abs(x) >= static_cast<genType>(1)) | |
return 0; | |
return static_cast<genType>(0.5) * log((static_cast<genType>(1) + x) / (static_cast<genType>(1) - x)); | |
} | |
# endif | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> atanh(vec<L, T, Q> const& v) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(atanh, v); | |
} | |
} | |
#if GLM_CONFIG_SIMD == GLM_ENABLE | |
# include "func_trigonometric_simd.inl" | |
#endif | |
# 20276 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
# 20292 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL uint packUnorm2x16(vec2 const& v); | |
# 20305 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL uint packSnorm2x16(vec2 const& v); | |
# 20318 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL uint packUnorm4x8(vec4 const& v); | |
# 20331 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL uint packSnorm4x8(vec4 const& v); | |
# 20344 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL vec2 unpackUnorm2x16(uint p); | |
# 20357 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL vec2 unpackSnorm2x16(uint p); | |
# 20370 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL vec4 unpackUnorm4x8(uint p); | |
# 20383 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL vec4 unpackSnorm4x8(uint p); | |
# 20393 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL double packDouble2x32(uvec2 const& v); | |
# 20402 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL uvec2 unpackDouble2x32(double v); | |
# 20412 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL uint packHalf2x16(vec2 const& v); | |
# 20422 "glm-amalgamated/glm.h" | |
GLM_FUNC_DECL vec2 unpackHalf2x16(uint v); | |
} | |
namespace glm{ | |
namespace detail | |
{ | |
typedef short hdata; | |
GLM_FUNC_DECL float toFloat32(hdata value); | |
GLM_FUNC_DECL hdata toFloat16(float const& value); | |
} | |
} | |
namespace glm{ | |
namespace detail | |
{ | |
GLM_FUNC_QUALIFIER float overflow() | |
{ | |
volatile float f = 1e10; | |
for(int i = 0; i < 10; ++i) | |
f *= f; | |
return f; | |
} | |
union uif32 | |
{ | |
GLM_FUNC_QUALIFIER uif32() : | |
i(0) | |
{} | |
GLM_FUNC_QUALIFIER uif32(float f_) : | |
f(f_) | |
{} | |
GLM_FUNC_QUALIFIER uif32(unsigned int i_) : | |
i(i_) | |
{} | |
float f; | |
unsigned int i; | |
}; | |
GLM_FUNC_QUALIFIER float toFloat32(hdata value) | |
{ | |
int s = (value >> 15) & 0x00000001; | |
int e = (value >> 10) & 0x0000001f; | |
int m = value & 0x000003ff; | |
if(e == 0) | |
{ | |
if(m == 0) | |
{ | |
detail::uif32 result; | |
result.i = static_cast<unsigned int>(s << 31); | |
return result.f; | |
} | |
else | |
{ | |
while(!(m & 0x00000400)) | |
{ | |
m <<= 1; | |
e -= 1; | |
} | |
e += 1; | |
m &= ~0x00000400; | |
} | |
} | |
else if(e == 31) | |
{ | |
if(m == 0) | |
{ | |
uif32 result; | |
result.i = static_cast<unsigned int>((s << 31) | 0x7f800000); | |
return result.f; | |
} | |
else | |
{ | |
uif32 result; | |
result.i = static_cast<unsigned int>((s << 31) | 0x7f800000 | (m << 13)); | |
return result.f; | |
} | |
} | |
e = e + (127 - 15); | |
m = m << 13; | |
uif32 Result; | |
Result.i = static_cast<unsigned int>((s << 31) | (e << 23) | m); | |
return Result.f; | |
} | |
GLM_FUNC_QUALIFIER hdata toFloat16(float const& f) | |
{ | |
uif32 Entry; | |
Entry.f = f; | |
int i = static_cast<int>(Entry.i); | |
# 20562 "glm-amalgamated/glm.h" | |
int s = (i >> 16) & 0x00008000; | |
int e = ((i >> 23) & 0x000000ff) - (127 - 15); | |
int m = i & 0x007fffff; | |
if(e <= 0) | |
{ | |
if(e < -10) | |
{ | |
# 20582 "glm-amalgamated/glm.h" | |
return hdata(s); | |
} | |
# 20592 "glm-amalgamated/glm.h" | |
m = (m | 0x00800000) >> (1 - e); | |
# 20603 "glm-amalgamated/glm.h" | |
if(m & 0x00001000) | |
m += 0x00002000; | |
return hdata(s | (m >> 13)); | |
} | |
else if(e == 0xff - (127 - 15)) | |
{ | |
if(m == 0) | |
{ | |
return hdata(s | 0x7c00); | |
} | |
else | |
{ | |
# 20634 "glm-amalgamated/glm.h" | |
m >>= 13; | |
return hdata(s | 0x7c00 | m | (m == 0)); | |
} | |
} | |
else | |
{ | |
# 20650 "glm-amalgamated/glm.h" | |
if(m & 0x00001000) | |
{ | |
m += 0x00002000; | |
if(m & 0x00800000) | |
{ | |
m = 0; | |
e += 1; | |
} | |
} | |
if (e > 30) | |
{ | |
overflow(); | |
return hdata(s | 0x7c00); | |
} | |
return hdata(s | (e << 10) | (m >> 13)); | |
} | |
} | |
} | |
} | |
namespace glm | |
{ | |
GLM_FUNC_QUALIFIER uint packUnorm2x16(vec2 const& v) | |
{ | |
union | |
{ | |
unsigned short in[2]; | |
uint out; | |
} u; | |
vec<2, unsigned short, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 65535.0f)); | |
u.in[0] = result[0]; | |
u.in[1] = result[1]; | |
return u.out; | |
} | |
GLM_FUNC_QUALIFIER vec2 unpackUnorm2x16(uint p) | |
{ | |
union | |
{ | |
uint in; | |
unsigned short out[2]; | |
} u; | |
u.in = p; | |
return vec2(u.out[0], u.out[1]) * 1.5259021896696421759365224689097e-5f; | |
} | |
GLM_FUNC_QUALIFIER uint packSnorm2x16(vec2 const& v) | |
{ | |
union | |
{ | |
signed short in[2]; | |
uint out; | |
} u; | |
vec<2, short, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 32767.0f)); | |
u.in[0] = result[0]; | |
u.in[1] = result[1]; | |
return u.out; | |
} | |
GLM_FUNC_QUALIFIER vec2 unpackSnorm2x16(uint p) | |
{ | |
union | |
{ | |
uint in; | |
signed short out[2]; | |
} u; | |
u.in = p; | |
return clamp(vec2(u.out[0], u.out[1]) * 3.0518509475997192297128208258309e-5f, -1.0f, 1.0f); | |
} | |
GLM_FUNC_QUALIFIER uint packUnorm4x8(vec4 const& v) | |
{ | |
union | |
{ | |
unsigned char in[4]; | |
uint out; | |
} u; | |
vec<4, unsigned char, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 255.0f)); | |
u.in[0] = result[0]; | |
u.in[1] = result[1]; | |
u.in[2] = result[2]; | |
u.in[3] = result[3]; | |
return u.out; | |
} | |
GLM_FUNC_QUALIFIER vec4 unpackUnorm4x8(uint p) | |
{ | |
union | |
{ | |
uint in; | |
unsigned char out[4]; | |
} u; | |
u.in = p; | |
return vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0039215686274509803921568627451f; | |
} | |
GLM_FUNC_QUALIFIER uint packSnorm4x8(vec4 const& v) | |
{ | |
union | |
{ | |
signed char in[4]; | |
uint out; | |
} u; | |
vec<4, signed char, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 127.0f)); | |
u.in[0] = result[0]; | |
u.in[1] = result[1]; | |
u.in[2] = result[2]; | |
u.in[3] = result[3]; | |
return u.out; | |
} | |
GLM_FUNC_QUALIFIER glm::vec4 unpackSnorm4x8(uint p) | |
{ | |
union | |
{ | |
uint in; | |
signed char out[4]; | |
} u; | |
u.in = p; | |
return clamp(vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0078740157480315f, -1.0f, 1.0f); | |
} | |
GLM_FUNC_QUALIFIER double packDouble2x32(uvec2 const& v) | |
{ | |
union | |
{ | |
uint in[2]; | |
double out; | |
} u; | |
u.in[0] = v[0]; | |
u.in[1] = v[1]; | |
return u.out; | |
} | |
GLM_FUNC_QUALIFIER uvec2 unpackDouble2x32(double v) | |
{ | |
union | |
{ | |
double in; | |
uint out[2]; | |
} u; | |
u.in = v; | |
return uvec2(u.out[0], u.out[1]); | |
} | |
GLM_FUNC_QUALIFIER uint packHalf2x16(vec2 const& v) | |
{ | |
union | |
{ | |
signed short in[2]; | |
uint out; | |
} u; | |
u.in[0] = detail::toFloat16(v.x); | |
u.in[1] = detail::toFloat16(v.y); | |
return u.out; | |
} | |
GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint v) | |
{ | |
union | |
{ | |
uint in; | |
signed short out[2]; | |
} u; | |
u.in = v; | |
return vec2( | |
detail::toFloat32(u.out[0]), | |
detail::toFloat32(u.out[1])); | |
} | |
} | |
#if GLM_CONFIG_SIMD == GLM_ENABLE | |
# include "func_packing_simd.inl" | |
#endif | |
# 20884 "glm-amalgamated/glm.h" | |
namespace glm | |
{ | |
# 20897 "glm-amalgamated/glm.h" | |
template<length_t L, qualifier Q> | |
GLM_FUNC_DECL vec<L, uint, Q> uaddCarry( | |
vec<L, uint, Q> const& x, | |
vec<L, uint, Q> const& y, | |
vec<L, uint, Q> & carry); | |
# 20911 "glm-amalgamated/glm.h" | |
template<length_t L, qualifier Q> | |
GLM_FUNC_DECL vec<L, uint, Q> usubBorrow( | |
vec<L, uint, Q> const& x, | |
vec<L, uint, Q> const& y, | |
vec<L, uint, Q> & borrow); | |
# 20925 "glm-amalgamated/glm.h" | |
template<length_t L, qualifier Q> | |
GLM_FUNC_DECL void umulExtended( | |
vec<L, uint, Q> const& x, | |
vec<L, uint, Q> const& y, | |
vec<L, uint, Q> & msb, | |
vec<L, uint, Q> & lsb); | |
# 20940 "glm-amalgamated/glm.h" | |
template<length_t L, qualifier Q> | |
GLM_FUNC_DECL void imulExtended( | |
vec<L, int, Q> const& x, | |
vec<L, int, Q> const& y, | |
vec<L, int, Q> & msb, | |
vec<L, int, Q> & lsb); | |
# 20963 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> bitfieldExtract( | |
vec<L, T, Q> const& Value, | |
int Offset, | |
int Bits); | |
# 20984 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> bitfieldInsert( | |
vec<L, T, Q> const& Base, | |
vec<L, T, Q> const& Insert, | |
int Offset, | |
int Bits); | |
# 21000 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> bitfieldReverse(vec<L, T, Q> const& v); | |
template<typename genType> | |
GLM_FUNC_DECL int bitCount(genType v); | |
# 21019 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, int, Q> bitCount(vec<L, T, Q> const& v); | |
# 21030 "glm-amalgamated/glm.h" | |
template<typename genIUType> | |
GLM_FUNC_DECL int findLSB(genIUType x); | |
# 21042 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, int, Q> findLSB(vec<L, T, Q> const& v); | |
# 21054 "glm-amalgamated/glm.h" | |
template<typename genIUType> | |
GLM_FUNC_DECL int findMSB(genIUType x); | |
# 21067 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, int, Q> findMSB(vec<L, T, Q> const& v); | |
} | |
#if(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC) | |
# include <intrin.h> | |
#pragma intrinsic(_BitScanReverse) | |
#endif | |
#if !GLM_HAS_EXTENDED_INTEGER_TYPE | |
# if GLM_COMPILER & GLM_COMPILER_GCC | |
#pragma GCC diagnostic ignored "-Wlong-long" | |
# endif | |
# if (GLM_COMPILER & GLM_COMPILER_CLANG) | |
#pragma clang diagnostic ignored "-Wc++11-long-long" | |
# endif | |
#endif | |
namespace glm{ | |
namespace detail | |
{ | |
template<typename T> | |
GLM_FUNC_QUALIFIER T mask(T Bits) | |
{ | |
return Bits >= static_cast<T>(sizeof(T) * 8) ? ~static_cast<T>(0) : (static_cast<T>(1) << Bits) - static_cast<T>(1); | |
} | |
template<length_t L, typename T, qualifier Q, bool Aligned, bool EXEC> | |
struct compute_bitfieldReverseStep | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T, T) | |
{ | |
return v; | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_bitfieldReverseStep<L, T, Q, Aligned, true> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T Mask, T Shift) | |
{ | |
return (v & Mask) << Shift | (v & (~Mask)) >> Shift; | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned, bool EXEC> | |
struct compute_bitfieldBitCountStep | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T, T) | |
{ | |
return v; | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_bitfieldBitCountStep<L, T, Q, Aligned, true> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T Mask, T Shift) | |
{ | |
return (v & Mask) + ((v >> Shift) & Mask); | |
} | |
}; | |
template<typename genIUType, size_t Bits> | |
struct compute_findLSB | |
{ | |
GLM_FUNC_QUALIFIER static int call(genIUType Value) | |
{ | |
if(Value == 0) | |
return -1; | |
return glm::bitCount(~Value & (Value - static_cast<genIUType>(1))); | |
} | |
}; | |
# if GLM_HAS_BITSCAN_WINDOWS | |
template<typename genIUType> | |
struct compute_findLSB<genIUType, 32> | |
{ | |
GLM_FUNC_QUALIFIER static int call(genIUType Value) | |
{ | |
unsigned long Result(0); | |
unsigned char IsNotNull = _BitScanForward(&Result, *reinterpret_cast<unsigned long*>(&Value)); | |
return IsNotNull ? int(Result) : -1; | |
} | |
}; | |
# if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32)) | |
template<typename genIUType> | |
struct compute_findLSB<genIUType, 64> | |
{ | |
GLM_FUNC_QUALIFIER static int call(genIUType Value) | |
{ | |
unsigned long Result(0); | |
unsigned char IsNotNull = _BitScanForward64(&Result, *reinterpret_cast<unsigned __int64*>(&Value)); | |
return IsNotNull ? int(Result) : -1; | |
} | |
}; | |
# endif | |
# endif | |
template<length_t L, typename T, qualifier Q, bool EXEC = true> | |
struct compute_findMSB_step_vec | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, T Shift) | |
{ | |
return x | (x >> Shift); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q> | |
struct compute_findMSB_step_vec<L, T, Q, false> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, T) | |
{ | |
return x; | |
} | |
}; | |
template<length_t L, typename T, qualifier Q, int> | |
struct compute_findMSB_vec | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, int, Q> call(vec<L, T, Q> const& v) | |
{ | |
vec<L, T, Q> x(v); | |
x = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 1)); | |
x = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 2)); | |
x = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 4)); | |
x = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 16>::call(x, static_cast<T>( 8)); | |
x = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 32>::call(x, static_cast<T>(16)); | |
x = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 64>::call(x, static_cast<T>(32)); | |
return vec<L, int, Q>(sizeof(T) * 8 - 1) - glm::bitCount(~x); | |
} | |
}; | |
# if GLM_HAS_BITSCAN_WINDOWS | |
template<typename genIUType> | |
GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value) | |
{ | |
unsigned long Result(0); | |
unsigned char IsNotNull = _BitScanReverse(&Result, *reinterpret_cast<unsigned long*>(&Value)); | |
return IsNotNull ? int(Result) : -1; | |
} | |
template<length_t L, typename T, qualifier Q> | |
struct compute_findMSB_vec<L, T, Q, 32> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, int, Q> call(vec<L, T, Q> const& x) | |
{ | |
return detail::functor1<vec, L, int, T, Q>::call(compute_findMSB_32, x); | |
} | |
}; | |
# if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32)) | |
template<typename genIUType> | |
GLM_FUNC_QUALIFIER int compute_findMSB_64(genIUType Value) | |
{ | |
unsigned long Result(0); | |
unsigned char IsNotNull = _BitScanReverse64(&Result, *reinterpret_cast<unsigned __int64*>(&Value)); | |
return IsNotNull ? int(Result) : -1; | |
} | |
template<length_t L, typename T, qualifier Q> | |
struct compute_findMSB_vec<L, T, Q, 64> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, int, Q> call(vec<L, T, Q> const& x) | |
{ | |
return detail::functor1<vec, L, int, T, Q>::call(compute_findMSB_64, x); | |
} | |
}; | |
# endif | |
# endif | |
} | |
GLM_FUNC_QUALIFIER uint uaddCarry(uint const& x, uint const& y, uint & Carry) | |
{ | |
detail::uint64 const Value64(static_cast<detail::uint64>(x) + static_cast<detail::uint64>(y)); | |
detail::uint64 const Max32((static_cast<detail::uint64>(1) << static_cast<detail::uint64>(32)) - static_cast<detail::uint64>(1)); | |
Carry = Value64 > Max32 ? 1u : 0u; | |
return static_cast<uint>(Value64 % (Max32 + static_cast<detail::uint64>(1))); | |
} | |
template<length_t L, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, uint, Q> uaddCarry(vec<L, uint, Q> const& x, vec<L, uint, Q> const& y, vec<L, uint, Q>& Carry) | |
{ | |
vec<L, detail::uint64, Q> Value64(vec<L, detail::uint64, Q>(x) + vec<L, detail::uint64, Q>(y)); | |
vec<L, detail::uint64, Q> Max32((static_cast<detail::uint64>(1) << static_cast<detail::uint64>(32)) - static_cast<detail::uint64>(1)); | |
Carry = mix(vec<L, uint, Q>(0), vec<L, uint, Q>(1), greaterThan(Value64, Max32)); | |
return vec<L, uint, Q>(Value64 % (Max32 + static_cast<detail::uint64>(1))); | |
} | |
GLM_FUNC_QUALIFIER uint usubBorrow(uint const& x, uint const& y, uint & Borrow) | |
{ | |
Borrow = x >= y ? static_cast<uint>(0) : static_cast<uint>(1); | |
if(y >= x) | |
return y - x; | |
else | |
return static_cast<uint>((static_cast<detail::int64>(1) << static_cast<detail::int64>(32)) + (static_cast<detail::int64>(y) - static_cast<detail::int64>(x))); | |
} | |
template<length_t L, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, uint, Q> usubBorrow(vec<L, uint, Q> const& x, vec<L, uint, Q> const& y, vec<L, uint, Q>& Borrow) | |
{ | |
Borrow = mix(vec<L, uint, Q>(1), vec<L, uint, Q>(0), greaterThanEqual(x, y)); | |
vec<L, uint, Q> const YgeX(y - x); | |
vec<L, uint, Q> const XgeY(vec<L, uint, Q>((static_cast<detail::int64>(1) << static_cast<detail::int64>(32)) + (vec<L, detail::int64, Q>(y) - vec<L, detail::int64, Q>(x)))); | |
return mix(XgeY, YgeX, greaterThanEqual(y, x)); | |
} | |
GLM_FUNC_QUALIFIER void umulExtended(uint const& x, uint const& y, uint & msb, uint & lsb) | |
{ | |
detail::uint64 Value64 = static_cast<detail::uint64>(x) * static_cast<detail::uint64>(y); | |
msb = static_cast<uint>(Value64 >> static_cast<detail::uint64>(32)); | |
lsb = static_cast<uint>(Value64); | |
} | |
template<length_t L, qualifier Q> | |
GLM_FUNC_QUALIFIER void umulExtended(vec<L, uint, Q> const& x, vec<L, uint, Q> const& y, vec<L, uint, Q>& msb, vec<L, uint, Q>& lsb) | |
{ | |
vec<L, detail::uint64, Q> Value64(vec<L, detail::uint64, Q>(x) * vec<L, detail::uint64, Q>(y)); | |
msb = vec<L, uint, Q>(Value64 >> static_cast<detail::uint64>(32)); | |
lsb = vec<L, uint, Q>(Value64); | |
} | |
GLM_FUNC_QUALIFIER void imulExtended(int x, int y, int& msb, int& lsb) | |
{ | |
detail::int64 Value64 = static_cast<detail::int64>(x) * static_cast<detail::int64>(y); | |
msb = static_cast<int>(Value64 >> static_cast<detail::int64>(32)); | |
lsb = static_cast<int>(Value64); | |
} | |
template<length_t L, qualifier Q> | |
GLM_FUNC_QUALIFIER void imulExtended(vec<L, int, Q> const& x, vec<L, int, Q> const& y, vec<L, int, Q>& msb, vec<L, int, Q>& lsb) | |
{ | |
vec<L, detail::int64, Q> Value64(vec<L, detail::int64, Q>(x) * vec<L, detail::int64, Q>(y)); | |
lsb = vec<L, int, Q>(Value64 & static_cast<detail::int64>(0xFFFFFFFF)); | |
msb = vec<L, int, Q>((Value64 >> static_cast<detail::int64>(32)) & static_cast<detail::int64>(0xFFFFFFFF)); | |
} | |
template<typename genIUType> | |
GLM_FUNC_QUALIFIER genIUType bitfieldExtract(genIUType Value, int Offset, int Bits) | |
{ | |
return bitfieldExtract(vec<1, genIUType>(Value), Offset, Bits).x; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldExtract(vec<L, T, Q> const& Value, int Offset, int Bits) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitfieldExtract' only accept integer inputs"); | |
return (Value >> static_cast<T>(Offset)) & static_cast<T>(detail::mask(Bits)); | |
} | |
template<typename genIUType> | |
GLM_FUNC_QUALIFIER genIUType bitfieldInsert(genIUType const& Base, genIUType const& Insert, int Offset, int Bits) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitfieldInsert' only accept integer values"); | |
return bitfieldInsert(vec<1, genIUType>(Base), vec<1, genIUType>(Insert), Offset, Bits).x; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldInsert(vec<L, T, Q> const& Base, vec<L, T, Q> const& Insert, int Offset, int Bits) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitfieldInsert' only accept integer values"); | |
T const Mask = static_cast<T>(detail::mask(Bits) << Offset); | |
return (Base & ~Mask) | ((Insert << static_cast<T>(Offset)) & Mask); | |
} | |
template<typename genIUType> | |
GLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitfieldReverse' only accept integer values"); | |
return bitfieldReverse(glm::vec<1, genIUType, glm::defaultp>(x)).x; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldReverse(vec<L, T, Q> const& v) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitfieldReverse' only accept integer values"); | |
vec<L, T, Q> x(v); | |
x = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 2>::call(x, static_cast<T>(0x5555555555555555ull), static_cast<T>( 1)); | |
x = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 4>::call(x, static_cast<T>(0x3333333333333333ull), static_cast<T>( 2)); | |
x = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 8>::call(x, static_cast<T>(0x0F0F0F0F0F0F0F0Full), static_cast<T>( 4)); | |
x = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 16>::call(x, static_cast<T>(0x00FF00FF00FF00FFull), static_cast<T>( 8)); | |
x = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 32>::call(x, static_cast<T>(0x0000FFFF0000FFFFull), static_cast<T>(16)); | |
x = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 64>::call(x, static_cast<T>(0x00000000FFFFFFFFull), static_cast<T>(32)); | |
return x; | |
} | |
template<typename genIUType> | |
GLM_FUNC_QUALIFIER int bitCount(genIUType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitCount' only accept integer values"); | |
return bitCount(glm::vec<1, genIUType, glm::defaultp>(x)).x; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, int, Q> bitCount(vec<L, T, Q> const& v) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitCount' only accept integer values"); | |
# if GLM_COMPILER & GLM_COMPILER_VC | |
#pragma warning(push) | |
#pragma warning(disable : 4310) | |
# endif | |
vec<L, typename detail::make_unsigned<T>::type, Q> x(*reinterpret_cast<vec<L, typename detail::make_unsigned<T>::type, Q> const *>(&v)); | |
x = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 2>::call(x, typename detail::make_unsigned<T>::type(0x5555555555555555ull), typename detail::make_unsigned<T>::type( 1)); | |
x = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 4>::call(x, typename detail::make_unsigned<T>::type(0x3333333333333333ull), typename detail::make_unsigned<T>::type( 2)); | |
x = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 8>::call(x, typename detail::make_unsigned<T>::type(0x0F0F0F0F0F0F0F0Full), typename detail::make_unsigned<T>::type( 4)); | |
x = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 16>::call(x, typename detail::make_unsigned<T>::type(0x00FF00FF00FF00FFull), typename detail::make_unsigned<T>::type( 8)); | |
x = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 32>::call(x, typename detail::make_unsigned<T>::type(0x0000FFFF0000FFFFull), typename detail::make_unsigned<T>::type(16)); | |
x = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 64>::call(x, typename detail::make_unsigned<T>::type(0x00000000FFFFFFFFull), typename detail::make_unsigned<T>::type(32)); | |
return vec<L, int, Q>(x); | |
# if GLM_COMPILER & GLM_COMPILER_VC | |
#pragma warning(pop) | |
# endif | |
} | |
template<typename genIUType> | |
GLM_FUNC_QUALIFIER int findLSB(genIUType Value) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findLSB' only accept integer values"); | |
return detail::compute_findLSB<genIUType, sizeof(genIUType) * 8>::call(Value); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, int, Q> findLSB(vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'findLSB' only accept integer values"); | |
return detail::functor1<vec, L, int, T, Q>::call(findLSB, x); | |
} | |
template<typename genIUType> | |
GLM_FUNC_QUALIFIER int findMSB(genIUType v) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findMSB' only accept integer values"); | |
return findMSB(vec<1, genIUType>(v)).x; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, int, Q> findMSB(vec<L, T, Q> const& v) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'findMSB' only accept integer values"); | |
return detail::compute_findMSB_vec<L, T, Q, sizeof(T) * 8>::call(v); | |
} | |
} | |
#if GLM_CONFIG_SIMD == GLM_ENABLE | |
# include "func_integer_simd.inl" | |
#endif | |
namespace glm | |
{ | |
template <length_t L, typename T, qualifier Q> | |
inline T levels(vec<L, T, Q> const& Extent) | |
{ | |
return glm::log2(compMax(Extent)) + static_cast<T>(1); | |
} | |
template <typename T> | |
inline T levels(T Extent) | |
{ | |
return vec<1, T, defaultp>(Extent).x; | |
} | |
} | |
# 21532 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 21533 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_scalar_constants extension included") | |
# 21533 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType pi(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType cos_one_over_two(); | |
} | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType epsilon() | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'epsilon' only accepts floating-point inputs"); | |
return std::numeric_limits<genType>::epsilon(); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType pi() | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'pi' only accepts floating-point inputs"); | |
return static_cast<genType>(3.14159265358979323846264338327950288); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType cos_one_over_two() | |
{ | |
return genType(0.877582561890372716130286068203503191); | |
} | |
} | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 21581 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTC_constants extension included") | |
# 21581 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType zero(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType one(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType two_pi(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType root_pi(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType half_pi(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType e(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType euler(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType root_two(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType root_three(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType root_five(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType ln_two(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType third(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds(); | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio(); | |
} | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType zero() | |
{ | |
return genType(0); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one() | |
{ | |
return genType(1); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_pi() | |
{ | |
return genType(6.28318530717958647692528676655900576); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_pi() | |
{ | |
return genType(1.772453850905516027); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType half_pi() | |
{ | |
return genType(1.57079632679489661923132169163975144); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType three_over_two_pi() | |
{ | |
return genType(4.71238898038468985769396507491925432); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType quarter_pi() | |
{ | |
return genType(0.785398163397448309615660845819875721); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_pi() | |
{ | |
return genType(0.318309886183790671537767526745028724); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_two_pi() | |
{ | |
return genType(0.159154943091895335768883763372514362); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_pi() | |
{ | |
return genType(0.636619772367581343075535053490057448); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType four_over_pi() | |
{ | |
return genType(1.273239544735162686151070106980114898); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_root_pi() | |
{ | |
return genType(1.12837916709551257389615890312154517); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_root_two() | |
{ | |
return genType(0.707106781186547524400844362104849039); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_half_pi() | |
{ | |
return genType(1.253314137315500251); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two_pi() | |
{ | |
return genType(2.506628274631000502); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_ln_four() | |
{ | |
return genType(1.17741002251547469); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType e() | |
{ | |
return genType(2.71828182845904523536); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType euler() | |
{ | |
return genType(0.577215664901532860606); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two() | |
{ | |
return genType(1.41421356237309504880168872420969808); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_three() | |
{ | |
return genType(1.73205080756887729352744634150587236); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_five() | |
{ | |
return genType(2.23606797749978969640917366873127623); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_two() | |
{ | |
return genType(0.693147180559945309417232121458176568); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ten() | |
{ | |
return genType(2.30258509299404568401799145468436421); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ln_two() | |
{ | |
return genType(-0.3665129205816643); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType third() | |
{ | |
return genType(0.3333333333333333333333333333333333333333); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_thirds() | |
{ | |
return genType(0.666666666666666666666666666666666666667); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType golden_ratio() | |
{ | |
return genType(1.61803398874989484820458683436563811); | |
} | |
} | |
# 21938 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 21939 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_matrix_projection extension included") | |
# 21939 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
# 21959 "glm-amalgamated/glm.h" | |
template<typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> projectZO( | |
vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); | |
# 21975 "glm-amalgamated/glm.h" | |
template<typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> projectNO( | |
vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); | |
# 21991 "glm-amalgamated/glm.h" | |
template<typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> project( | |
vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); | |
# 22007 "glm-amalgamated/glm.h" | |
template<typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> unProjectZO( | |
vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); | |
# 22023 "glm-amalgamated/glm.h" | |
template<typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> unProjectNO( | |
vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); | |
# 22039 "glm-amalgamated/glm.h" | |
template<typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> unProject( | |
vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); | |
# 22052 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q, typename U> | |
GLM_FUNC_DECL mat<4, 4, T, Q> pickMatrix( | |
vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport); | |
} | |
namespace glm | |
{ | |
template<typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> projectZO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) | |
{ | |
vec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast<T>(1)); | |
tmp = model * tmp; | |
tmp = proj * tmp; | |
tmp /= tmp.w; | |
tmp.x = tmp.x * static_cast<T>(0.5) + static_cast<T>(0.5); | |
tmp.y = tmp.y * static_cast<T>(0.5) + static_cast<T>(0.5); | |
tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]); | |
tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]); | |
return vec<3, T, Q>(tmp); | |
} | |
template<typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> projectNO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) | |
{ | |
vec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast<T>(1)); | |
tmp = model * tmp; | |
tmp = proj * tmp; | |
tmp /= tmp.w; | |
tmp = tmp * static_cast<T>(0.5) + static_cast<T>(0.5); | |
tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]); | |
tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]); | |
return vec<3, T, Q>(tmp); | |
} | |
template<typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> project(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT | |
return projectZO(obj, model, proj, viewport); | |
# else | |
return projectNO(obj, model, proj, viewport); | |
# endif | |
} | |
template<typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> unProjectZO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) | |
{ | |
mat<4, 4, T, Q> Inverse = inverse(proj * model); | |
vec<4, T, Q> tmp = vec<4, T, Q>(win, T(1)); | |
tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]); | |
tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]); | |
tmp.x = tmp.x * static_cast<T>(2) - static_cast<T>(1); | |
tmp.y = tmp.y * static_cast<T>(2) - static_cast<T>(1); | |
vec<4, T, Q> obj = Inverse * tmp; | |
obj /= obj.w; | |
return vec<3, T, Q>(obj); | |
} | |
template<typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> unProjectNO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) | |
{ | |
mat<4, 4, T, Q> Inverse = inverse(proj * model); | |
vec<4, T, Q> tmp = vec<4, T, Q>(win, T(1)); | |
tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]); | |
tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]); | |
tmp = tmp * static_cast<T>(2) - static_cast<T>(1); | |
vec<4, T, Q> obj = Inverse * tmp; | |
obj /= obj.w; | |
return vec<3, T, Q>(obj); | |
} | |
template<typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> unProject(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT | |
return unProjectZO(win, model, proj, viewport); | |
# else | |
return unProjectNO(win, model, proj, viewport); | |
# endif | |
} | |
template<typename T, qualifier Q, typename U> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> pickMatrix(vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport) | |
{ | |
assert(delta.x > static_cast<T>(0) && delta.y > static_cast<T>(0)); | |
mat<4, 4, T, Q> Result(static_cast<T>(1)); | |
if(!(delta.x > static_cast<T>(0) && delta.y > static_cast<T>(0))) | |
return Result; | |
vec<3, T, Q> Temp( | |
(static_cast<T>(viewport[2]) - static_cast<T>(2) * (center.x - static_cast<T>(viewport[0]))) / delta.x, | |
(static_cast<T>(viewport[3]) - static_cast<T>(2) * (center.y - static_cast<T>(viewport[1]))) / delta.y, | |
static_cast<T>(0)); | |
Result = translate(Result, Temp); | |
return scale(Result, vec<3, T, Q>(static_cast<T>(viewport[2]) / delta.x, static_cast<T>(viewport[3]) / delta.y, static_cast<T>(1))); | |
} | |
} | |
# 22187 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 22188 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_matrix_clip_space extension included") | |
# 22188 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
# 22202 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> ortho( | |
T left, T right, T bottom, T top); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_ZO( | |
T left, T right, T bottom, T top, T zNear, T zFar); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_NO( | |
T left, T right, T bottom, T top, T zNear, T zFar); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_ZO( | |
T left, T right, T bottom, T top, T zNear, T zFar); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_NO( | |
T left, T right, T bottom, T top, T zNear, T zFar); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoZO( | |
T left, T right, T bottom, T top, T zNear, T zFar); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoNO( | |
T left, T right, T bottom, T top, T zNear, T zFar); | |
# 22273 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH( | |
T left, T right, T bottom, T top, T zNear, T zFar); | |
# 22284 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH( | |
T left, T right, T bottom, T top, T zNear, T zFar); | |
# 22295 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> ortho( | |
T left, T right, T bottom, T top, T zNear, T zFar); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_ZO( | |
T left, T right, T bottom, T top, T near, T far); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_NO( | |
T left, T right, T bottom, T top, T near, T far); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_ZO( | |
T left, T right, T bottom, T top, T near, T far); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_NO( | |
T left, T right, T bottom, T top, T near, T far); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumZO( | |
T left, T right, T bottom, T top, T near, T far); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumNO( | |
T left, T right, T bottom, T top, T near, T far); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH( | |
T left, T right, T bottom, T top, T near, T far); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH( | |
T left, T right, T bottom, T top, T near, T far); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> frustum( | |
T left, T right, T bottom, T top, T near, T far); | |
# 22384 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_ZO( | |
T fovy, T aspect, T near, T far); | |
# 22397 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_NO( | |
T fovy, T aspect, T near, T far); | |
# 22410 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_ZO( | |
T fovy, T aspect, T near, T far); | |
# 22423 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_NO( | |
T fovy, T aspect, T near, T far); | |
# 22436 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveZO( | |
T fovy, T aspect, T near, T far); | |
# 22449 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveNO( | |
T fovy, T aspect, T near, T far); | |
# 22463 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH( | |
T fovy, T aspect, T near, T far); | |
# 22477 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH( | |
T fovy, T aspect, T near, T far); | |
# 22491 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspective( | |
T fovy, T aspect, T near, T far); | |
# 22505 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_ZO( | |
T fov, T width, T height, T near, T far); | |
# 22519 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_NO( | |
T fov, T width, T height, T near, T far); | |
# 22533 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_ZO( | |
T fov, T width, T height, T near, T far); | |
# 22547 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_NO( | |
T fov, T width, T height, T near, T far); | |
# 22561 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovZO( | |
T fov, T width, T height, T near, T far); | |
# 22575 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovNO( | |
T fov, T width, T height, T near, T far); | |
# 22590 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH( | |
T fov, T width, T height, T near, T far); | |
# 22605 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH( | |
T fov, T width, T height, T near, T far); | |
# 22619 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFov( | |
T fov, T width, T height, T near, T far); | |
# 22630 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveLH( | |
T fovy, T aspect, T near); | |
# 22641 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveRH( | |
T fovy, T aspect, T near); | |
# 22652 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspective( | |
T fovy, T aspect, T near); | |
# 22663 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective( | |
T fovy, T aspect, T near); | |
# 22675 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective( | |
T fovy, T aspect, T near, T ep); | |
} | |
namespace glm | |
{ | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top) | |
{ | |
mat<4, 4, T, defaultp> Result(static_cast<T>(1)); | |
Result[0][0] = static_cast<T>(2) / (right - left); | |
Result[1][1] = static_cast<T>(2) / (top - bottom); | |
Result[2][2] = - static_cast<T>(1); | |
Result[3][0] = - (right + left) / (right - left); | |
Result[3][1] = - (top + bottom) / (top - bottom); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_ZO(T left, T right, T bottom, T top, T zNear, T zFar) | |
{ | |
mat<4, 4, T, defaultp> Result(1); | |
Result[0][0] = static_cast<T>(2) / (right - left); | |
Result[1][1] = static_cast<T>(2) / (top - bottom); | |
Result[2][2] = static_cast<T>(1) / (zFar - zNear); | |
Result[3][0] = - (right + left) / (right - left); | |
Result[3][1] = - (top + bottom) / (top - bottom); | |
Result[3][2] = - zNear / (zFar - zNear); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_NO(T left, T right, T bottom, T top, T zNear, T zFar) | |
{ | |
mat<4, 4, T, defaultp> Result(1); | |
Result[0][0] = static_cast<T>(2) / (right - left); | |
Result[1][1] = static_cast<T>(2) / (top - bottom); | |
Result[2][2] = static_cast<T>(2) / (zFar - zNear); | |
Result[3][0] = - (right + left) / (right - left); | |
Result[3][1] = - (top + bottom) / (top - bottom); | |
Result[3][2] = - (zFar + zNear) / (zFar - zNear); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_ZO(T left, T right, T bottom, T top, T zNear, T zFar) | |
{ | |
mat<4, 4, T, defaultp> Result(1); | |
Result[0][0] = static_cast<T>(2) / (right - left); | |
Result[1][1] = static_cast<T>(2) / (top - bottom); | |
Result[2][2] = - static_cast<T>(1) / (zFar - zNear); | |
Result[3][0] = - (right + left) / (right - left); | |
Result[3][1] = - (top + bottom) / (top - bottom); | |
Result[3][2] = - zNear / (zFar - zNear); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_NO(T left, T right, T bottom, T top, T zNear, T zFar) | |
{ | |
mat<4, 4, T, defaultp> Result(1); | |
Result[0][0] = static_cast<T>(2) / (right - left); | |
Result[1][1] = static_cast<T>(2) / (top - bottom); | |
Result[2][2] = - static_cast<T>(2) / (zFar - zNear); | |
Result[3][0] = - (right + left) / (right - left); | |
Result[3][1] = - (top + bottom) / (top - bottom); | |
Result[3][2] = - (zFar + zNear) / (zFar - zNear); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoZO(T left, T right, T bottom, T top, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT | |
return orthoLH_ZO(left, right, bottom, top, zNear, zFar); | |
# else | |
return orthoRH_ZO(left, right, bottom, top, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoNO(T left, T right, T bottom, T top, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT | |
return orthoLH_NO(left, right, bottom, top, zNear, zFar); | |
# else | |
return orthoRH_NO(left, right, bottom, top, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH(T left, T right, T bottom, T top, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT | |
return orthoLH_ZO(left, right, bottom, top, zNear, zFar); | |
# else | |
return orthoLH_NO(left, right, bottom, top, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH(T left, T right, T bottom, T top, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT | |
return orthoRH_ZO(left, right, bottom, top, zNear, zFar); | |
# else | |
return orthoRH_NO(left, right, bottom, top, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO | |
return orthoLH_ZO(left, right, bottom, top, zNear, zFar); | |
# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO | |
return orthoLH_NO(left, right, bottom, top, zNear, zFar); | |
# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO | |
return orthoRH_ZO(left, right, bottom, top, zNear, zFar); | |
# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO | |
return orthoRH_NO(left, right, bottom, top, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal) | |
{ | |
mat<4, 4, T, defaultp> Result(0); | |
Result[0][0] = (static_cast<T>(2) * nearVal) / (right - left); | |
Result[1][1] = (static_cast<T>(2) * nearVal) / (top - bottom); | |
Result[2][0] = (right + left) / (right - left); | |
Result[2][1] = (top + bottom) / (top - bottom); | |
Result[2][2] = farVal / (farVal - nearVal); | |
Result[2][3] = static_cast<T>(1); | |
Result[3][2] = -(farVal * nearVal) / (farVal - nearVal); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_NO(T left, T right, T bottom, T top, T nearVal, T farVal) | |
{ | |
mat<4, 4, T, defaultp> Result(0); | |
Result[0][0] = (static_cast<T>(2) * nearVal) / (right - left); | |
Result[1][1] = (static_cast<T>(2) * nearVal) / (top - bottom); | |
Result[2][0] = (right + left) / (right - left); | |
Result[2][1] = (top + bottom) / (top - bottom); | |
Result[2][2] = (farVal + nearVal) / (farVal - nearVal); | |
Result[2][3] = static_cast<T>(1); | |
Result[3][2] = - (static_cast<T>(2) * farVal * nearVal) / (farVal - nearVal); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal) | |
{ | |
mat<4, 4, T, defaultp> Result(0); | |
Result[0][0] = (static_cast<T>(2) * nearVal) / (right - left); | |
Result[1][1] = (static_cast<T>(2) * nearVal) / (top - bottom); | |
Result[2][0] = (right + left) / (right - left); | |
Result[2][1] = (top + bottom) / (top - bottom); | |
Result[2][2] = farVal / (nearVal - farVal); | |
Result[2][3] = static_cast<T>(-1); | |
Result[3][2] = -(farVal * nearVal) / (farVal - nearVal); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_NO(T left, T right, T bottom, T top, T nearVal, T farVal) | |
{ | |
mat<4, 4, T, defaultp> Result(0); | |
Result[0][0] = (static_cast<T>(2) * nearVal) / (right - left); | |
Result[1][1] = (static_cast<T>(2) * nearVal) / (top - bottom); | |
Result[2][0] = (right + left) / (right - left); | |
Result[2][1] = (top + bottom) / (top - bottom); | |
Result[2][2] = - (farVal + nearVal) / (farVal - nearVal); | |
Result[2][3] = static_cast<T>(-1); | |
Result[3][2] = - (static_cast<T>(2) * farVal * nearVal) / (farVal - nearVal); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumZO(T left, T right, T bottom, T top, T nearVal, T farVal) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT | |
return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); | |
# else | |
return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumNO(T left, T right, T bottom, T top, T nearVal, T farVal) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT | |
return frustumLH_NO(left, right, bottom, top, nearVal, farVal); | |
# else | |
return frustumRH_NO(left, right, bottom, top, nearVal, farVal); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH(T left, T right, T bottom, T top, T nearVal, T farVal) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT | |
return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); | |
# else | |
return frustumLH_NO(left, right, bottom, top, nearVal, farVal); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH(T left, T right, T bottom, T top, T nearVal, T farVal) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT | |
return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); | |
# else | |
return frustumRH_NO(left, right, bottom, top, nearVal, farVal); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustum(T left, T right, T bottom, T top, T nearVal, T farVal) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO | |
return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); | |
# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO | |
return frustumLH_NO(left, right, bottom, top, nearVal, farVal); | |
# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO | |
return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); | |
# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO | |
return frustumRH_NO(left, right, bottom, top, nearVal, farVal); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_ZO(T fovy, T aspect, T zNear, T zFar) | |
{ | |
assert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0)); | |
T const tanHalfFovy = tan(fovy / static_cast<T>(2)); | |
mat<4, 4, T, defaultp> Result(static_cast<T>(0)); | |
Result[0][0] = static_cast<T>(1) / (aspect * tanHalfFovy); | |
Result[1][1] = static_cast<T>(1) / (tanHalfFovy); | |
Result[2][2] = zFar / (zNear - zFar); | |
Result[2][3] = - static_cast<T>(1); | |
Result[3][2] = -(zFar * zNear) / (zFar - zNear); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_NO(T fovy, T aspect, T zNear, T zFar) | |
{ | |
assert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0)); | |
T const tanHalfFovy = tan(fovy / static_cast<T>(2)); | |
mat<4, 4, T, defaultp> Result(static_cast<T>(0)); | |
Result[0][0] = static_cast<T>(1) / (aspect * tanHalfFovy); | |
Result[1][1] = static_cast<T>(1) / (tanHalfFovy); | |
Result[2][2] = - (zFar + zNear) / (zFar - zNear); | |
Result[2][3] = - static_cast<T>(1); | |
Result[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_ZO(T fovy, T aspect, T zNear, T zFar) | |
{ | |
assert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0)); | |
T const tanHalfFovy = tan(fovy / static_cast<T>(2)); | |
mat<4, 4, T, defaultp> Result(static_cast<T>(0)); | |
Result[0][0] = static_cast<T>(1) / (aspect * tanHalfFovy); | |
Result[1][1] = static_cast<T>(1) / (tanHalfFovy); | |
Result[2][2] = zFar / (zFar - zNear); | |
Result[2][3] = static_cast<T>(1); | |
Result[3][2] = -(zFar * zNear) / (zFar - zNear); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_NO(T fovy, T aspect, T zNear, T zFar) | |
{ | |
assert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0)); | |
T const tanHalfFovy = tan(fovy / static_cast<T>(2)); | |
mat<4, 4, T, defaultp> Result(static_cast<T>(0)); | |
Result[0][0] = static_cast<T>(1) / (aspect * tanHalfFovy); | |
Result[1][1] = static_cast<T>(1) / (tanHalfFovy); | |
Result[2][2] = (zFar + zNear) / (zFar - zNear); | |
Result[2][3] = static_cast<T>(1); | |
Result[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveZO(T fovy, T aspect, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT | |
return perspectiveLH_ZO(fovy, aspect, zNear, zFar); | |
# else | |
return perspectiveRH_ZO(fovy, aspect, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveNO(T fovy, T aspect, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT | |
return perspectiveLH_NO(fovy, aspect, zNear, zFar); | |
# else | |
return perspectiveRH_NO(fovy, aspect, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH(T fovy, T aspect, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT | |
return perspectiveLH_ZO(fovy, aspect, zNear, zFar); | |
# else | |
return perspectiveLH_NO(fovy, aspect, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH(T fovy, T aspect, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT | |
return perspectiveRH_ZO(fovy, aspect, zNear, zFar); | |
# else | |
return perspectiveRH_NO(fovy, aspect, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspective(T fovy, T aspect, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO | |
return perspectiveLH_ZO(fovy, aspect, zNear, zFar); | |
# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO | |
return perspectiveLH_NO(fovy, aspect, zNear, zFar); | |
# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO | |
return perspectiveRH_ZO(fovy, aspect, zNear, zFar); | |
# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO | |
return perspectiveRH_NO(fovy, aspect, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_ZO(T fov, T width, T height, T zNear, T zFar) | |
{ | |
assert(width > static_cast<T>(0)); | |
assert(height > static_cast<T>(0)); | |
assert(fov > static_cast<T>(0)); | |
T const rad = fov; | |
T const h = glm::cos(static_cast<T>(0.5) * rad) / glm::sin(static_cast<T>(0.5) * rad); | |
T const w = h * height / width; | |
mat<4, 4, T, defaultp> Result(static_cast<T>(0)); | |
Result[0][0] = w; | |
Result[1][1] = h; | |
Result[2][2] = zFar / (zNear - zFar); | |
Result[2][3] = - static_cast<T>(1); | |
Result[3][2] = -(zFar * zNear) / (zFar - zNear); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_NO(T fov, T width, T height, T zNear, T zFar) | |
{ | |
assert(width > static_cast<T>(0)); | |
assert(height > static_cast<T>(0)); | |
assert(fov > static_cast<T>(0)); | |
T const rad = fov; | |
T const h = glm::cos(static_cast<T>(0.5) * rad) / glm::sin(static_cast<T>(0.5) * rad); | |
T const w = h * height / width; | |
mat<4, 4, T, defaultp> Result(static_cast<T>(0)); | |
Result[0][0] = w; | |
Result[1][1] = h; | |
Result[2][2] = - (zFar + zNear) / (zFar - zNear); | |
Result[2][3] = - static_cast<T>(1); | |
Result[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_ZO(T fov, T width, T height, T zNear, T zFar) | |
{ | |
assert(width > static_cast<T>(0)); | |
assert(height > static_cast<T>(0)); | |
assert(fov > static_cast<T>(0)); | |
T const rad = fov; | |
T const h = glm::cos(static_cast<T>(0.5) * rad) / glm::sin(static_cast<T>(0.5) * rad); | |
T const w = h * height / width; | |
mat<4, 4, T, defaultp> Result(static_cast<T>(0)); | |
Result[0][0] = w; | |
Result[1][1] = h; | |
Result[2][2] = zFar / (zFar - zNear); | |
Result[2][3] = static_cast<T>(1); | |
Result[3][2] = -(zFar * zNear) / (zFar - zNear); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_NO(T fov, T width, T height, T zNear, T zFar) | |
{ | |
assert(width > static_cast<T>(0)); | |
assert(height > static_cast<T>(0)); | |
assert(fov > static_cast<T>(0)); | |
T const rad = fov; | |
T const h = glm::cos(static_cast<T>(0.5) * rad) / glm::sin(static_cast<T>(0.5) * rad); | |
T const w = h * height / width; | |
mat<4, 4, T, defaultp> Result(static_cast<T>(0)); | |
Result[0][0] = w; | |
Result[1][1] = h; | |
Result[2][2] = (zFar + zNear) / (zFar - zNear); | |
Result[2][3] = static_cast<T>(1); | |
Result[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovZO(T fov, T width, T height, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT | |
return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); | |
# else | |
return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovNO(T fov, T width, T height, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT | |
return perspectiveFovLH_NO(fov, width, height, zNear, zFar); | |
# else | |
return perspectiveFovRH_NO(fov, width, height, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH(T fov, T width, T height, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT | |
return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); | |
# else | |
return perspectiveFovLH_NO(fov, width, height, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH(T fov, T width, T height, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT | |
return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); | |
# else | |
return perspectiveFovRH_NO(fov, width, height, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFov(T fov, T width, T height, T zNear, T zFar) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO | |
return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); | |
# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO | |
return perspectiveFovLH_NO(fov, width, height, zNear, zFar); | |
# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO | |
return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); | |
# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO | |
return perspectiveFovRH_NO(fov, width, height, zNear, zFar); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveRH(T fovy, T aspect, T zNear) | |
{ | |
T const range = tan(fovy / static_cast<T>(2)) * zNear; | |
T const left = -range * aspect; | |
T const right = range * aspect; | |
T const bottom = -range; | |
T const top = range; | |
mat<4, 4, T, defaultp> Result(static_cast<T>(0)); | |
Result[0][0] = (static_cast<T>(2) * zNear) / (right - left); | |
Result[1][1] = (static_cast<T>(2) * zNear) / (top - bottom); | |
Result[2][2] = - static_cast<T>(1); | |
Result[2][3] = - static_cast<T>(1); | |
Result[3][2] = - static_cast<T>(2) * zNear; | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveLH(T fovy, T aspect, T zNear) | |
{ | |
T const range = tan(fovy / static_cast<T>(2)) * zNear; | |
T const left = -range * aspect; | |
T const right = range * aspect; | |
T const bottom = -range; | |
T const top = range; | |
mat<4, 4, T, defaultp> Result(T(0)); | |
Result[0][0] = (static_cast<T>(2) * zNear) / (right - left); | |
Result[1][1] = (static_cast<T>(2) * zNear) / (top - bottom); | |
Result[2][2] = static_cast<T>(1); | |
Result[2][3] = static_cast<T>(1); | |
Result[3][2] = - static_cast<T>(2) * zNear; | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspective(T fovy, T aspect, T zNear) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT | |
return infinitePerspectiveLH(fovy, aspect, zNear); | |
# else | |
return infinitePerspectiveRH(fovy, aspect, zNear); | |
# endif | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear, T ep) | |
{ | |
T const range = tan(fovy / static_cast<T>(2)) * zNear; | |
T const left = -range * aspect; | |
T const right = range * aspect; | |
T const bottom = -range; | |
T const top = range; | |
mat<4, 4, T, defaultp> Result(static_cast<T>(0)); | |
Result[0][0] = (static_cast<T>(2) * zNear) / (right - left); | |
Result[1][1] = (static_cast<T>(2) * zNear) / (top - bottom); | |
Result[2][2] = ep - static_cast<T>(1); | |
Result[2][3] = static_cast<T>(-1); | |
Result[3][2] = (ep - static_cast<T>(2)) * zNear; | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear) | |
{ | |
return tweakedInfinitePerspective(fovy, aspect, zNear, epsilon<T>()); | |
} | |
} | |
# 23259 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 23260 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_matrix_transform extension included") | |
# 23260 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_DECL GLM_CONSTEXPR genType identity(); | |
# 23294 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> translate( | |
mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v); | |
# 23310 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> rotate( | |
mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& axis); | |
# 23325 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> scale( | |
mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v); | |
# 23339 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> lookAtRH( | |
vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); | |
# 23353 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> lookAtLH( | |
vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); | |
# 23368 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> lookAt( | |
vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); | |
} | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType identity() | |
{ | |
return detail::init_gentype<genType, detail::genTypeTrait<genType>::GENTYPE>::identity(); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) | |
{ | |
mat<4, 4, T, Q> Result(m); | |
Result[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v) | |
{ | |
T const a = angle; | |
T const c = cos(a); | |
T const s = sin(a); | |
vec<3, T, Q> axis(normalize(v)); | |
vec<3, T, Q> temp((T(1) - c) * axis); | |
mat<4, 4, T, Q> Rotate; | |
Rotate[0][0] = c + temp[0] * axis[0]; | |
Rotate[0][1] = temp[0] * axis[1] + s * axis[2]; | |
Rotate[0][2] = temp[0] * axis[2] - s * axis[1]; | |
Rotate[1][0] = temp[1] * axis[0] - s * axis[2]; | |
Rotate[1][1] = c + temp[1] * axis[1]; | |
Rotate[1][2] = temp[1] * axis[2] + s * axis[0]; | |
Rotate[2][0] = temp[2] * axis[0] + s * axis[1]; | |
Rotate[2][1] = temp[2] * axis[1] - s * axis[0]; | |
Rotate[2][2] = c + temp[2] * axis[2]; | |
mat<4, 4, T, Q> Result; | |
Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; | |
Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; | |
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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate_slow(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v) | |
{ | |
T const a = angle; | |
T const c = cos(a); | |
T const s = sin(a); | |
mat<4, 4, T, Q> Result; | |
vec<3, T, Q> axis = normalize(v); | |
Result[0][0] = c + (static_cast<T>(1) - c) * axis.x * axis.x; | |
Result[0][1] = (static_cast<T>(1) - c) * axis.x * axis.y + s * axis.z; | |
Result[0][2] = (static_cast<T>(1) - c) * axis.x * axis.z - s * axis.y; | |
Result[0][3] = static_cast<T>(0); | |
Result[1][0] = (static_cast<T>(1) - c) * axis.y * axis.x - s * axis.z; | |
Result[1][1] = c + (static_cast<T>(1) - c) * axis.y * axis.y; | |
Result[1][2] = (static_cast<T>(1) - c) * axis.y * axis.z + s * axis.x; | |
Result[1][3] = static_cast<T>(0); | |
Result[2][0] = (static_cast<T>(1) - c) * axis.z * axis.x + s * axis.y; | |
Result[2][1] = (static_cast<T>(1) - c) * axis.z * axis.y - s * axis.x; | |
Result[2][2] = c + (static_cast<T>(1) - c) * axis.z * axis.z; | |
Result[2][3] = static_cast<T>(0); | |
Result[3] = vec<4, T, Q>(0, 0, 0, 1); | |
return m * Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) | |
{ | |
mat<4, 4, T, Q> Result; | |
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, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale_slow(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) | |
{ | |
mat<4, 4, T, Q> Result(T(1)); | |
Result[0][0] = v.x; | |
Result[1][1] = v.y; | |
Result[2][2] = v.z; | |
return m * Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtRH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) | |
{ | |
vec<3, T, Q> const f(normalize(center - eye)); | |
vec<3, T, Q> const s(normalize(cross(f, up))); | |
vec<3, T, Q> const u(cross(s, f)); | |
mat<4, 4, T, Q> 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; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtLH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) | |
{ | |
vec<3, T, Q> const f(normalize(center - eye)); | |
vec<3, T, Q> const s(normalize(cross(up, f))); | |
vec<3, T, Q> const u(cross(f, s)); | |
mat<4, 4, T, Q> 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; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAt(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) | |
{ | |
GLM_IF_CONSTEXPR(GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT) | |
return lookAtLH(eye, center, up); | |
else | |
return lookAtRH(eye, center, up); | |
} | |
} | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 23529 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTC_matrix_transform extension included") | |
# 23529 "glm-amalgamated/glm.h" | |
#endif | |
# 23552 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 23553 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_relational extension included") | |
# 23553 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
# 23567 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T epsilon); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T epsilon); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, int ULPs); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, int, Q> const& ULPs); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, int ULPs); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, int, Q> const& ULPs); | |
} | |
#if GLM_COMPILER == GLM_COMPILER_VC12 | |
#pragma warning(push) | |
#pragma warning(disable: 4512) | |
#endif | |
namespace glm{ | |
namespace detail | |
{ | |
template <typename T> | |
union float_t | |
{}; | |
template <> | |
union float_t<float> | |
{ | |
typedef int int_type; | |
typedef float float_type; | |
GLM_CONSTEXPR float_t(float_type Num = 0.0f) : f(Num) {} | |
GLM_CONSTEXPR float_t& operator=(float_t const& x) | |
{ | |
f = x.f; | |
return *this; | |
} | |
GLM_CONSTEXPR bool negative() const { return i < 0; } | |
GLM_CONSTEXPR int_type mantissa() const { return i & ((1 << 23) - 1); } | |
GLM_CONSTEXPR int_type exponent() const { return (i >> 23) & ((1 << 8) - 1); } | |
int_type i; | |
float_type f; | |
}; | |
template <> | |
union float_t<double> | |
{ | |
typedef detail::int64 int_type; | |
typedef double float_type; | |
GLM_CONSTEXPR float_t(float_type Num = static_cast<float_type>(0)) : f(Num) {} | |
GLM_CONSTEXPR float_t& operator=(float_t const& x) | |
{ | |
f = x.f; | |
return *this; | |
} | |
GLM_CONSTEXPR bool negative() const { return i < 0; } | |
GLM_CONSTEXPR int_type mantissa() const { return i & ((int_type(1) << 52) - 1); } | |
GLM_CONSTEXPR int_type exponent() const { return (i >> 52) & ((int_type(1) << 11) - 1); } | |
int_type i; | |
float_type f; | |
}; | |
} | |
} | |
#if GLM_COMPILER == GLM_COMPILER_VC12 | |
#pragma warning(pop) | |
#endif | |
namespace glm | |
{ | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T Epsilon) | |
{ | |
return equal(x, y, vec<L, T, Q>(Epsilon)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& Epsilon) | |
{ | |
return lessThanEqual(abs(x - y), Epsilon); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T Epsilon) | |
{ | |
return notEqual(x, y, vec<L, T, Q>(Epsilon)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& Epsilon) | |
{ | |
return greaterThan(abs(x - y), Epsilon); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, int MaxULPs) | |
{ | |
return equal(x, y, vec<L, int, Q>(MaxULPs)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, int, Q> const& MaxULPs) | |
{ | |
vec<L, bool, Q> Result(false); | |
for(length_t i = 0; i < L; ++i) | |
{ | |
detail::float_t<T> const a(x[i]); | |
detail::float_t<T> const b(y[i]); | |
if(a.negative() != b.negative()) | |
{ | |
Result[i] = a.mantissa() == b.mantissa() && a.exponent() == b.exponent(); | |
} | |
else | |
{ | |
typename detail::float_t<T>::int_type const DiffULPs = abs(a.i - b.i); | |
Result[i] = DiffULPs <= MaxULPs[i]; | |
} | |
} | |
return Result; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, int MaxULPs) | |
{ | |
return notEqual(x, y, vec<L, int, Q>(MaxULPs)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, int, Q> const& MaxULPs) | |
{ | |
return not_(equal(x, y, MaxULPs)); | |
} | |
} | |
# 23811 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 23812 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_quaternion_geometric extension included") | |
# 23812 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
# 23826 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL T length(qua<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> normalize(qua<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL T dot(qua<T, Q> const& x, qua<T, Q> const& y); | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> cross(qua<T, Q> const& q1, qua<T, Q> const& q2); | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T dot(qua<T, Q> const& x, qua<T, Q> const& y) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs"); | |
return detail::compute_dot<qua<T, Q>, T, detail::is_aligned<Q>::value>::call(x, y); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T length(qua<T, Q> const& q) | |
{ | |
return glm::sqrt(dot(q, q)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> normalize(qua<T, Q> const& q) | |
{ | |
T len = length(q); | |
if(len <= static_cast<T>(0)) | |
return qua<T, Q>(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0)); | |
T oneOverLen = static_cast<T>(1) / len; | |
return qua<T, Q>(q.w * oneOverLen, q.x * oneOverLen, q.y * oneOverLen, q.z * oneOverLen); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> cross(qua<T, Q> const& q1, qua<T, Q> const& q2) | |
{ | |
return qua<T, Q>( | |
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); | |
} | |
} | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 23897 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_quaternion_common extension included") | |
# 23897 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
# 23917 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> mix(qua<T, Q> const& x, qua<T, Q> const& y, T a); | |
# 23929 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> lerp(qua<T, Q> const& x, qua<T, Q> const& y, T a); | |
# 23941 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a); | |
# 23956 "glm-amalgamated/glm.h" | |
template<typename T, typename S, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a, S k); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> conjugate(qua<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> inverse(qua<T, Q> const& q); | |
# 23983 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, bool, Q> isnan(qua<T, Q> const& x); | |
# 23994 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, bool, Q> isinf(qua<T, Q> const& x); | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> mix(qua<T, Q> const& x, qua<T, Q> const& y, T a) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'mix' only accept floating-point inputs"); | |
T const cosTheta = dot(x, y); | |
if(cosTheta > static_cast<T>(1) - epsilon<T>()) | |
{ | |
return qua<T, Q>( | |
mix(x.w, y.w, a), | |
mix(x.x, y.x, a), | |
mix(x.y, y.y, a), | |
mix(x.z, y.z, a)); | |
} | |
else | |
{ | |
T angle = acos(cosTheta); | |
return (sin((static_cast<T>(1) - a) * angle) * x + sin(a * angle) * y) / sin(angle); | |
} | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> lerp(qua<T, Q> const& x, qua<T, Q> const& y, T a) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'lerp' only accept floating-point inputs"); | |
assert(a >= static_cast<T>(0)); | |
assert(a <= static_cast<T>(1)); | |
return x * (static_cast<T>(1) - a) + (y * a); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'slerp' only accept floating-point inputs"); | |
qua<T, Q> z = y; | |
T cosTheta = dot(x, y); | |
if(cosTheta < static_cast<T>(0)) | |
{ | |
z = -y; | |
cosTheta = -cosTheta; | |
} | |
if(cosTheta > static_cast<T>(1) - epsilon<T>()) | |
{ | |
return qua<T, Q>( | |
mix(x.w, z.w, a), | |
mix(x.x, z.x, a), | |
mix(x.y, z.y, a), | |
mix(x.z, z.z, a)); | |
} | |
else | |
{ | |
T angle = acos(cosTheta); | |
return (sin((static_cast<T>(1) - a) * angle) * x + sin(a * angle) * z) / sin(angle); | |
} | |
} | |
template<typename T, typename S, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a, S k) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'slerp' only accept floating-point inputs"); | |
GLM_STATIC_ASSERT(std::numeric_limits<S>::is_integer, "'slerp' only accept integer for spin count"); | |
qua<T, Q> z = y; | |
T cosTheta = dot(x, y); | |
if (cosTheta < static_cast<T>(0)) | |
{ | |
z = -y; | |
cosTheta = -cosTheta; | |
} | |
if (cosTheta > static_cast<T>(1) - epsilon<T>()) | |
{ | |
return qua<T, Q>( | |
mix(x.w, z.w, a), | |
mix(x.x, z.x, a), | |
mix(x.y, z.y, a), | |
mix(x.z, z.z, a)); | |
} | |
else | |
{ | |
T angle = acos(cosTheta); | |
T phi = angle + k * glm::pi<T>(); | |
return (sin(angle - a * phi)* x + sin(a * phi) * z) / sin(angle); | |
} | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> conjugate(qua<T, Q> const& q) | |
{ | |
return qua<T, Q>(q.w, -q.x, -q.y, -q.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> inverse(qua<T, Q> const& q) | |
{ | |
return conjugate(q) / dot(q, q); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, bool, Q> isnan(qua<T, Q> const& q) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isnan' only accept floating-point inputs"); | |
return vec<4, bool, Q>(isnan(q.x), isnan(q.y), isnan(q.z), isnan(q.w)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, bool, Q> isinf(qua<T, Q> const& q) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isinf' only accept floating-point inputs"); | |
return vec<4, bool, Q>(isinf(q.x), isinf(q.y), isinf(q.z), isinf(q.w)); | |
} | |
} | |
#if GLM_CONFIG_SIMD == GLM_ENABLE | |
# include "quaternion_common_simd.inl" | |
#endif | |
# 24189 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 24190 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_quaternion_relational extension included") | |
# 24190 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, bool, Q> equal(qua<T, Q> const& x, qua<T, Q> const& y); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, bool, Q> equal(qua<T, Q> const& x, qua<T, Q> const& y, T epsilon); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, bool, Q> notEqual(qua<T, Q> const& x, qua<T, Q> const& y); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, bool, Q> notEqual(qua<T, Q> const& x, qua<T, Q> const& y, T epsilon); | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua<T, Q> const& x, qua<T, Q> const& y) | |
{ | |
vec<4, bool, Q> Result; | |
for(length_t i = 0; i < x.length(); ++i) | |
Result[i] = x[i] == y[i]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua<T, Q> const& x, qua<T, Q> const& y, T epsilon) | |
{ | |
vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); | |
return lessThan(abs(v), vec<4, T, Q>(epsilon)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua<T, Q> const& x, qua<T, Q> const& y) | |
{ | |
vec<4, bool, Q> Result; | |
for(length_t i = 0; i < x.length(); ++i) | |
Result[i] = x[i] != y[i]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua<T, Q> const& x, qua<T, Q> const& y, T epsilon) | |
{ | |
vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); | |
return greaterThanEqual(abs(v), vec<4, T, Q>(epsilon)); | |
} | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
struct qua | |
{ | |
typedef qua<T, Q> type; | |
typedef T value_type; | |
# if GLM_SILENT_WARNINGS == GLM_ENABLE | |
# if GLM_COMPILER & GLM_COMPILER_GCC | |
#pragma GCC diagnostic push | |
#pragma GCC diagnostic ignored "-Wpedantic" | |
# elif GLM_COMPILER & GLM_COMPILER_CLANG | |
#pragma clang diagnostic push | |
#pragma clang diagnostic ignored "-Wgnu-anonymous-struct" | |
#pragma clang diagnostic ignored "-Wnested-anon-types" | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
#pragma warning(push) | |
#pragma warning(disable: 4201) | |
# endif | |
# endif | |
# if GLM_LANG & GLM_LANG_CXXMS_FLAG | |
union | |
{ | |
# ifdef GLM_FORCE_QUAT_DATA_WXYZ | |
struct { T w, x, y, z; }; | |
# else | |
struct { T x, y, z, w; }; | |
# endif | |
typename detail::storage<4, T, detail::is_aligned<Q>::value>::type data; | |
}; | |
# else | |
# ifdef GLM_FORCE_QUAT_DATA_WXYZ | |
T w, x, y, z; | |
# else | |
T x, y, z, w; | |
# endif | |
# endif | |
# if GLM_SILENT_WARNINGS == GLM_ENABLE | |
# if GLM_COMPILER & GLM_COMPILER_CLANG | |
#pragma clang diagnostic pop | |
# elif GLM_COMPILER & GLM_COMPILER_GCC | |
#pragma GCC diagnostic pop | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
#pragma warning(pop) | |
# endif | |
# endif | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} | |
GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); | |
GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR qua() GLM_DEFAULT; | |
GLM_FUNC_DECL GLM_CONSTEXPR qua(qua<T, Q> const& q) GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua(qua<T, P> const& q); | |
GLM_FUNC_DECL GLM_CONSTEXPR qua(T s, vec<3, T, Q> const& v); | |
GLM_FUNC_DECL GLM_CONSTEXPR qua(T w, T x, T y, T z); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(qua<U, P> const& q); | |
# if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS | |
GLM_FUNC_DECL explicit operator mat<3, 3, T, Q>() const; | |
GLM_FUNC_DECL explicit operator mat<4, 4, T, Q>() const; | |
# endif | |
GLM_FUNC_DECL qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v); | |
GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(vec<3, T, Q> const& eulerAngles); | |
GLM_FUNC_DECL GLM_EXPLICIT qua(mat<3, 3, T, Q> const& q); | |
GLM_FUNC_DECL GLM_EXPLICIT qua(mat<4, 4, T, Q> const& q); | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator=(qua<T, Q> const& q) GLM_DEFAULT; | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator=(qua<U, Q> const& q); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator+=(qua<U, Q> const& q); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator-=(qua<U, Q> const& q); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator*=(qua<U, Q> const& q); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator*=(U s); | |
template<typename U> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator/=(U s); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator+(qua<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator-(qua<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator+(qua<T, Q> const& q, qua<T, Q> const& p); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator-(qua<T, Q> const& q, qua<T, Q> const& p); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator*(qua<T, Q> const& q, qua<T, Q> const& p); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(qua<T, Q> const& q, vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(qua<T, Q> const& q, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator*(qua<T, Q> const& q, T const& s); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator*(T const& s, qua<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator/(qua<T, Q> const& q, T const& s); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(qua<T, Q> const& q1, qua<T, Q> const& q2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(qua<T, Q> const& q1, qua<T, Q> const& q2); | |
} | |
#ifndef GLM_EXTERNAL_TEMPLATE | |
namespace glm{ | |
namespace detail | |
{ | |
template <typename T> | |
struct genTypeTrait<qua<T> > | |
{ | |
static const genTypeEnum GENTYPE = GENTYPE_QUAT; | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_dot<qua<T, Q>, T, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(qua<T, Q> const& a, qua<T, Q> const& b) | |
{ | |
vec<4, T, Q> tmp(a.w * b.w, a.x * b.x, a.y * b.y, a.z * b.z); | |
return (tmp.x + tmp.y) + (tmp.z + tmp.w); | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_quat_add | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua<T, Q> call(qua<T, Q> const& q, qua<T, Q> const& p) | |
{ | |
return qua<T, Q>(q.w + p.w, q.x + p.x, q.y + p.y, q.z + p.z); | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_quat_sub | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua<T, Q> call(qua<T, Q> const& q, qua<T, Q> const& p) | |
{ | |
return qua<T, Q>(q.w - p.w, q.x - p.x, q.y - p.y, q.z - p.z); | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_quat_mul_scalar | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua<T, Q> call(qua<T, Q> const& q, T s) | |
{ | |
return qua<T, Q>(q.w * s, q.x * s, q.y * s, q.z * s); | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_quat_div_scalar | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua<T, Q> call(qua<T, Q> const& q, T s) | |
{ | |
return qua<T, Q>(q.w / s, q.x / s, q.y / s, q.z / s); | |
} | |
}; | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_quat_mul_vec4 | |
{ | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(qua<T, Q> const& q, vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(q * vec<3, T, Q>(v), v.w); | |
} | |
}; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & qua<T, Q>::operator[](typename qua<T, Q>::length_type i) | |
{ | |
assert(i >= 0 && i < this->length()); | |
# ifdef GLM_FORCE_QUAT_DATA_WXYZ | |
return (&w)[i]; | |
# else | |
return (&x)[i]; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& qua<T, Q>::operator[](typename qua<T, Q>::length_type i) const | |
{ | |
assert(i >= 0 && i < this->length()); | |
# ifdef GLM_FORCE_QUAT_DATA_WXYZ | |
return (&w)[i]; | |
# else | |
return (&x)[i]; | |
# endif | |
} | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua() | |
# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE | |
# ifdef GLM_FORCE_QUAT_DATA_WXYZ | |
: w(1), x(0), y(0), z(0) | |
# else | |
: x(0), y(0), z(0), w(1) | |
# endif | |
# endif | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(qua<T, Q> const& q) | |
# ifdef GLM_FORCE_QUAT_DATA_WXYZ | |
: w(q.w), x(q.x), y(q.y), z(q.z) | |
# else | |
: x(q.x), y(q.y), z(q.z), w(q.w) | |
# endif | |
{} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(qua<T, P> const& q) | |
# ifdef GLM_FORCE_QUAT_DATA_WXYZ | |
: w(q.w), x(q.x), y(q.y), z(q.z) | |
# else | |
: x(q.x), y(q.y), z(q.z), w(q.w) | |
# endif | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(T s, vec<3, T, Q> const& v) | |
# ifdef GLM_FORCE_QUAT_DATA_WXYZ | |
: w(s), x(v.x), y(v.y), z(v.z) | |
# else | |
: x(v.x), y(v.y), z(v.z), w(s) | |
# endif | |
{} | |
template <typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(T _w, T _x, T _y, T _z) | |
# ifdef GLM_FORCE_QUAT_DATA_WXYZ | |
: w(_w), x(_x), y(_y), z(_z) | |
# else | |
: x(_x), y(_y), z(_z), w(_w) | |
# endif | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(qua<U, P> const& q) | |
# ifdef GLM_FORCE_QUAT_DATA_WXYZ | |
: w(static_cast<T>(q.w)), x(static_cast<T>(q.x)), y(static_cast<T>(q.y)), z(static_cast<T>(q.z)) | |
# else | |
: x(static_cast<T>(q.x)), y(static_cast<T>(q.y)), z(static_cast<T>(q.z)), w(static_cast<T>(q.w)) | |
# endif | |
{} | |
# 24608 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q>::qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v) | |
{ | |
T norm_u_norm_v = sqrt(dot(u, u) * dot(v, v)); | |
T real_part = norm_u_norm_v + dot(u, v); | |
vec<3, T, Q> t; | |
if(real_part < static_cast<T>(1.e-6f) * norm_u_norm_v) | |
{ | |
real_part = static_cast<T>(0); | |
t = abs(u.x) > abs(u.z) ? vec<3, T, Q>(-u.y, u.x, static_cast<T>(0)) : vec<3, T, Q>(static_cast<T>(0), -u.z, u.y); | |
} | |
else | |
{ | |
t = cross(u, v); | |
} | |
*this = normalize(qua<T, Q>(real_part, t.x, t.y, t.z)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(vec<3, T, Q> const& eulerAngle) | |
{ | |
vec<3, T, Q> c = glm::cos(eulerAngle * T(0.5)); | |
vec<3, T, Q> s = glm::sin(eulerAngle * T(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, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q>::qua(mat<3, 3, T, Q> const& m) | |
{ | |
*this = quat_cast(m); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q>::qua(mat<4, 4, T, Q> const& m) | |
{ | |
*this = quat_cast(m); | |
} | |
# if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q>::operator mat<3, 3, T, Q>() const | |
{ | |
return mat3_cast(*this); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q>::operator mat<4, 4, T, Q>() const | |
{ | |
return mat4_cast(*this); | |
} | |
# endif | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator=(qua<T, Q> const& q) | |
{ | |
this->w = q.w; | |
this->x = q.x; | |
this->y = q.y; | |
this->z = q.z; | |
return *this; | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator=(qua<U, Q> const& q) | |
{ | |
this->w = static_cast<T>(q.w); | |
this->x = static_cast<T>(q.x); | |
this->y = static_cast<T>(q.y); | |
this->z = static_cast<T>(q.z); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator+=(qua<U, Q> const& q) | |
{ | |
return (*this = detail::compute_quat_add<T, Q, detail::is_aligned<Q>::value>::call(*this, qua<T, Q>(q))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator-=(qua<U, Q> const& q) | |
{ | |
return (*this = detail::compute_quat_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, qua<T, Q>(q))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator*=(qua<U, Q> const& r) | |
{ | |
qua<T, Q> const p(*this); | |
qua<T, Q> const q(r); | |
this->w = p.w * q.w - p.x * q.x - p.y * q.y - p.z * q.z; | |
this->x = p.w * q.x + p.x * q.w + p.y * q.z - p.z * q.y; | |
this->y = p.w * q.y + p.y * q.w + p.z * q.x - p.x * q.z; | |
this->z = p.w * q.z + p.z * q.w + p.x * q.y - p.y * q.x; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator*=(U s) | |
{ | |
return (*this = detail::compute_quat_mul_scalar<T, Q, detail::is_aligned<Q>::value>::call(*this, static_cast<U>(s))); | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator/=(U s) | |
{ | |
return (*this = detail::compute_quat_div_scalar<T, Q, detail::is_aligned<Q>::value>::call(*this, static_cast<U>(s))); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator+(qua<T, Q> const& q) | |
{ | |
return q; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator-(qua<T, Q> const& q) | |
{ | |
return qua<T, Q>(-q.w, -q.x, -q.y, -q.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator+(qua<T, Q> const& q, qua<T, Q> const& p) | |
{ | |
return qua<T, Q>(q) += p; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator-(qua<T, Q> const& q, qua<T, Q> const& p) | |
{ | |
return qua<T, Q>(q) -= p; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator*(qua<T, Q> const& q, qua<T, Q> const& p) | |
{ | |
return qua<T, Q>(q) *= p; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(qua<T, Q> const& q, vec<3, T, Q> const& v) | |
{ | |
vec<3, T, Q> const QuatVector(q.x, q.y, q.z); | |
vec<3, T, Q> const uv(glm::cross(QuatVector, v)); | |
vec<3, T, Q> const uuv(glm::cross(QuatVector, uv)); | |
return v + ((uv * q.w) + uuv) * static_cast<T>(2); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua<T, Q> const& q) | |
{ | |
return glm::inverse(q) * v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(qua<T, Q> const& q, vec<4, T, Q> const& v) | |
{ | |
return detail::compute_quat_mul_vec4<T, Q, detail::is_aligned<Q>::value>::call(q, v); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua<T, Q> const& q) | |
{ | |
return glm::inverse(q) * v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator*(qua<T, Q> const& q, T const& s) | |
{ | |
return qua<T, Q>( | |
q.w * s, q.x * s, q.y * s, q.z * s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator*(T const& s, qua<T, Q> const& q) | |
{ | |
return q * s; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator/(qua<T, Q> const& q, T const& s) | |
{ | |
return qua<T, Q>( | |
q.w / s, q.x / s, q.y / s, q.z / s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(qua<T, Q> const& q1, qua<T, Q> const& q2) | |
{ | |
return q1.x == q2.x && q1.y == q2.y && q1.z == q2.z && q1.w == q2.w; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(qua<T, Q> const& q1, qua<T, Q> const& q2) | |
{ | |
return q1.x != q2.x || q1.y != q2.y || q1.z != q2.z || q1.w != q2.w; | |
} | |
} | |
#if GLM_CONFIG_SIMD == GLM_ENABLE | |
# include "type_quat_simd.inl" | |
#endif | |
#endif | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 24841 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_quaternion_float extension included") | |
# 24841 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef qua<float, defaultp> quat; | |
} | |
# 24868 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 24869 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_quaternion_float_precision extension included") | |
# 24869 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef qua<float, lowp> lowp_quat; | |
typedef qua<float, mediump> mediump_quat; | |
typedef qua<float, highp> highp_quat; | |
} | |
# 24911 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 24912 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_quaternion_double extension included") | |
# 24912 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef qua<double, defaultp> dquat; | |
} | |
# 24939 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 24940 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_quaternion_double_precision extension included") | |
# 24940 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef qua<double, lowp> lowp_dquat; | |
typedef qua<double, mediump> mediump_dquat; | |
typedef qua<double, highp> highp_dquat; | |
} | |
# 24986 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 24987 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_quaternion_trigonometric extension included") | |
# 24987 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL T angle(qua<T, Q> const& x); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> axis(qua<T, Q> const& x); | |
# 25016 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> angleAxis(T const& angle, vec<3, T, Q> const& axis); | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T angle(qua<T, Q> const& x) | |
{ | |
if (abs(x.w) > cos_one_over_two<T>()) | |
{ | |
return asin(sqrt(x.x * x.x + x.y * x.y + x.z * x.z)) * static_cast<T>(2); | |
} | |
return acos(x.w) * static_cast<T>(2); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> axis(qua<T, Q> const& x) | |
{ | |
T const tmp1 = static_cast<T>(1) - x.w * x.w; | |
if(tmp1 <= static_cast<T>(0)) | |
return vec<3, T, Q>(0, 0, 1); | |
T const tmp2 = static_cast<T>(1) / sqrt(tmp1); | |
return vec<3, T, Q>(x.x * tmp2, x.y * tmp2, x.z * tmp2); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> angleAxis(T const& angle, vec<3, T, Q> const& v) | |
{ | |
T const a(angle); | |
T const s = glm::sin(a * static_cast<T>(0.5)); | |
return qua<T, Q>(glm::cos(a * static_cast<T>(0.5)), v * s); | |
} | |
} | |
# 25075 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25076 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_quaternion_transform extension included") | |
# 25076 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
# 25092 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> rotate(qua<T, Q> const& q, T const& angle, vec<3, T, Q> const& axis); | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> rotate(qua<T, Q> const& q, T const& angle, vec<3, T, Q> const& v) | |
{ | |
vec<3, T, Q> Tmp = v; | |
T len = glm::length(Tmp); | |
if(abs(len - static_cast<T>(1)) > static_cast<T>(0.001)) | |
{ | |
T oneOverLen = static_cast<T>(1) / len; | |
Tmp.x *= oneOverLen; | |
Tmp.y *= oneOverLen; | |
Tmp.z *= oneOverLen; | |
} | |
T const AngleRad(angle); | |
T const Sin = sin(AngleRad * static_cast<T>(0.5)); | |
return q * qua<T, Q>(cos(AngleRad * static_cast<T>(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin); | |
} | |
} | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25123 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTC_quaternion extension included") | |
# 25123 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
# 25137 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> eulerAngles(qua<T, Q> const& x); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL T roll(qua<T, Q> const& x); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL T pitch(qua<T, Q> const& x); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL T yaw(qua<T, Q> const& x); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 3, T, Q> mat3_cast(qua<T, Q> const& x); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> mat4_cast(qua<T, Q> const& x); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> quat_cast(mat<3, 3, T, Q> const& x); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> quat_cast(mat<4, 4, T, Q> const& x); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, bool, Q> lessThan(qua<T, Q> const& x, qua<T, Q> const& y); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, bool, Q> lessThanEqual(qua<T, Q> const& x, qua<T, Q> const& y); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, bool, Q> greaterThan(qua<T, Q> const& x, qua<T, Q> const& y); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, bool, Q> greaterThanEqual(qua<T, Q> const& x, qua<T, Q> const& y); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> quatLookAt( | |
vec<3, T, Q> const& direction, | |
vec<3, T, Q> const& up); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> quatLookAtRH( | |
vec<3, T, Q> const& direction, | |
vec<3, T, Q> const& up); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> quatLookAtLH( | |
vec<3, T, Q> const& direction, | |
vec<3, T, Q> const& up); | |
} | |
# 25277 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25278 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTC_epsilon extension included") | |
# 25278 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, bool, Q> epsilonEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon); | |
template<typename genType> | |
GLM_FUNC_DECL bool epsilonEqual(genType const& x, genType const& y, genType const& epsilon); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, bool, Q> epsilonNotEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon); | |
template<typename genType> | |
GLM_FUNC_DECL bool epsilonNotEqual(genType const& x, genType const& y, genType const& epsilon); | |
} | |
namespace glm | |
{ | |
template<> | |
GLM_FUNC_QUALIFIER bool epsilonEqual | |
( | |
float const& x, | |
float const& y, | |
float const& epsilon | |
) | |
{ | |
return abs(x - y) < epsilon; | |
} | |
template<> | |
GLM_FUNC_QUALIFIER bool epsilonEqual | |
( | |
double const& x, | |
double const& y, | |
double const& epsilon | |
) | |
{ | |
return abs(x - y) < epsilon; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, bool, Q> epsilonEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon) | |
{ | |
return lessThan(abs(x - y), vec<L, T, Q>(epsilon)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, bool, Q> epsilonEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon) | |
{ | |
return lessThan(abs(x - y), vec<L, T, Q>(epsilon)); | |
} | |
template<> | |
GLM_FUNC_QUALIFIER bool epsilonNotEqual(float const& x, float const& y, float const& epsilon) | |
{ | |
return abs(x - y) >= epsilon; | |
} | |
template<> | |
GLM_FUNC_QUALIFIER bool epsilonNotEqual(double const& x, double const& y, double const& epsilon) | |
{ | |
return abs(x - y) >= epsilon; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, bool, Q> epsilonNotEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon) | |
{ | |
return greaterThanEqual(abs(x - y), vec<L, T, Q>(epsilon)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, bool, Q> epsilonNotEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon) | |
{ | |
return greaterThanEqual(abs(x - y), vec<L, T, Q>(epsilon)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonEqual(qua<T, Q> const& x, qua<T, Q> const& y, T const& epsilon) | |
{ | |
vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); | |
return lessThan(abs(v), vec<4, T, Q>(epsilon)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonNotEqual(qua<T, Q> const& x, qua<T, Q> const& y, T const& epsilon) | |
{ | |
vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); | |
return greaterThanEqual(abs(v), vec<4, T, Q>(epsilon)); | |
} | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> eulerAngles(qua<T, Q> const& x) | |
{ | |
return vec<3, T, Q>(pitch(x), yaw(x), roll(x)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T roll(qua<T, Q> const& q) | |
{ | |
return static_cast<T>(atan(static_cast<T>(2) * (q.x * q.y + q.w * q.z), q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T pitch(qua<T, Q> const& q) | |
{ | |
T const y = static_cast<T>(2) * (q.y * q.z + q.w * q.x); | |
T const x = q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z; | |
if(all(equal(vec<2, T, Q>(x, y), vec<2, T, Q>(0), epsilon<T>()))) | |
return static_cast<T>(static_cast<T>(2) * atan(q.x, q.w)); | |
return static_cast<T>(atan(y, x)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T yaw(qua<T, Q> const& q) | |
{ | |
return asin(clamp(static_cast<T>(-2) * (q.x * q.z - q.w * q.y), static_cast<T>(-1), static_cast<T>(1))); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat3_cast(qua<T, Q> const& q) | |
{ | |
mat<3, 3, T, Q> Result(T(1)); | |
T qxx(q.x * q.x); | |
T qyy(q.y * q.y); | |
T qzz(q.z * q.z); | |
T qxz(q.x * q.z); | |
T qxy(q.x * q.y); | |
T qyz(q.y * q.z); | |
T qwx(q.w * q.x); | |
T qwy(q.w * q.y); | |
T qwz(q.w * q.z); | |
Result[0][0] = T(1) - T(2) * (qyy + qzz); | |
Result[0][1] = T(2) * (qxy + qwz); | |
Result[0][2] = T(2) * (qxz - qwy); | |
Result[1][0] = T(2) * (qxy - qwz); | |
Result[1][1] = T(1) - T(2) * (qxx + qzz); | |
Result[1][2] = T(2) * (qyz + qwx); | |
Result[2][0] = T(2) * (qxz + qwy); | |
Result[2][1] = T(2) * (qyz - qwx); | |
Result[2][2] = T(1) - T(2) * (qxx + qyy); | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat4_cast(qua<T, Q> const& q) | |
{ | |
return mat<4, 4, T, Q>(mat3_cast(q)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> quat_cast(mat<3, 3, T, Q> const& m) | |
{ | |
T fourXSquaredMinus1 = m[0][0] - m[1][1] - m[2][2]; | |
T fourYSquaredMinus1 = m[1][1] - m[0][0] - m[2][2]; | |
T fourZSquaredMinus1 = m[2][2] - m[0][0] - m[1][1]; | |
T fourWSquaredMinus1 = m[0][0] + m[1][1] + m[2][2]; | |
int biggestIndex = 0; | |
T fourBiggestSquaredMinus1 = fourWSquaredMinus1; | |
if(fourXSquaredMinus1 > fourBiggestSquaredMinus1) | |
{ | |
fourBiggestSquaredMinus1 = fourXSquaredMinus1; | |
biggestIndex = 1; | |
} | |
if(fourYSquaredMinus1 > fourBiggestSquaredMinus1) | |
{ | |
fourBiggestSquaredMinus1 = fourYSquaredMinus1; | |
biggestIndex = 2; | |
} | |
if(fourZSquaredMinus1 > fourBiggestSquaredMinus1) | |
{ | |
fourBiggestSquaredMinus1 = fourZSquaredMinus1; | |
biggestIndex = 3; | |
} | |
T biggestVal = sqrt(fourBiggestSquaredMinus1 + static_cast<T>(1)) * static_cast<T>(0.5); | |
T mult = static_cast<T>(0.25) / biggestVal; | |
switch(biggestIndex) | |
{ | |
case 0: | |
return qua<T, Q>(biggestVal, (m[1][2] - m[2][1]) * mult, (m[2][0] - m[0][2]) * mult, (m[0][1] - m[1][0]) * mult); | |
case 1: | |
return qua<T, Q>((m[1][2] - m[2][1]) * mult, biggestVal, (m[0][1] + m[1][0]) * mult, (m[2][0] + m[0][2]) * mult); | |
case 2: | |
return qua<T, Q>((m[2][0] - m[0][2]) * mult, (m[0][1] + m[1][0]) * mult, biggestVal, (m[1][2] + m[2][1]) * mult); | |
case 3: | |
return qua<T, Q>((m[0][1] - m[1][0]) * mult, (m[2][0] + m[0][2]) * mult, (m[1][2] + m[2][1]) * mult, biggestVal); | |
default: | |
assert(false); | |
return qua<T, Q>(1, 0, 0, 0); | |
} | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> quat_cast(mat<4, 4, T, Q> const& m4) | |
{ | |
return quat_cast(mat<3, 3, T, Q>(m4)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, bool, Q> lessThan(qua<T, Q> const& x, qua<T, Q> const& y) | |
{ | |
vec<4, bool, Q> Result; | |
for(length_t i = 0; i < x.length(); ++i) | |
Result[i] = x[i] < y[i]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, bool, Q> lessThanEqual(qua<T, Q> const& x, qua<T, Q> const& y) | |
{ | |
vec<4, bool, Q> Result; | |
for(length_t i = 0; i < x.length(); ++i) | |
Result[i] = x[i] <= y[i]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThan(qua<T, Q> const& x, qua<T, Q> const& y) | |
{ | |
vec<4, bool, Q> Result; | |
for(length_t i = 0; i < x.length(); ++i) | |
Result[i] = x[i] > y[i]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThanEqual(qua<T, Q> const& x, qua<T, Q> const& y) | |
{ | |
vec<4, bool, Q> Result; | |
for(length_t i = 0; i < x.length(); ++i) | |
Result[i] = x[i] >= y[i]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> quatLookAt(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) | |
{ | |
# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT | |
return quatLookAtLH(direction, up); | |
# else | |
return quatLookAtRH(direction, up); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> quatLookAtRH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) | |
{ | |
mat<3, 3, T, Q> Result; | |
Result[2] = -direction; | |
vec<3, T, Q> const& Right = cross(up, Result[2]); | |
Result[0] = Right * inversesqrt(max(static_cast<T>(0.00001), dot(Right, Right))); | |
Result[1] = cross(Result[2], Result[0]); | |
return quat_cast(Result); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> quatLookAtLH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) | |
{ | |
mat<3, 3, T, Q> Result; | |
Result[2] = direction; | |
vec<3, T, Q> const& Right = cross(up, Result[2]); | |
Result[0] = Right * inversesqrt(max(static_cast<T>(0.00001), dot(Right, Right))); | |
Result[1] = cross(Result[2], Result[0]); | |
return quat_cast(Result); | |
} | |
} | |
#if GLM_CONFIG_SIMD == GLM_ENABLE | |
# include "quaternion_simd.inl" | |
#endif | |
# 25619 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25620 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_bool1 extension included") | |
# 25620 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<1, bool, defaultp> bvec1; | |
} | |
# 25644 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25645 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_bool1_precision extension included") | |
# 25645 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<1, bool, highp> highp_bvec1; | |
typedef vec<1, bool, mediump> mediump_bvec1; | |
typedef vec<1, bool, lowp> lowp_bvec1; | |
} | |
# 25678 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25679 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_float1 extension included") | |
# 25679 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<1, float, defaultp> vec1; | |
} | |
# 25705 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25706 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_float1_precision extension included") | |
# 25706 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<1, float, highp> highp_vec1; | |
typedef vec<1, float, mediump> mediump_vec1; | |
typedef vec<1, float, lowp> lowp_vec1; | |
} | |
# 25739 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25740 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_double1 extension included") | |
# 25740 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<1, double, defaultp> dvec1; | |
} | |
# 25766 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25767 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_double1_precision extension included") | |
# 25767 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<1, double, highp> highp_dvec1; | |
typedef vec<1, double, mediump> mediump_dvec1; | |
typedef vec<1, double, lowp> lowp_dvec1; | |
} | |
# 25800 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25801 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_int1 extension included") | |
# 25801 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<1, int, defaultp> ivec1; | |
} | |
# 25829 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25830 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_int1_sized extension included") | |
# 25830 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<1, int8, defaultp> i8vec1; | |
typedef vec<1, int16, defaultp> i16vec1; | |
typedef vec<1, int32, defaultp> i32vec1; | |
typedef vec<1, int64, defaultp> i64vec1; | |
} | |
# 25874 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25875 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_uint1 extension included") | |
# 25875 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<1, unsigned int, defaultp> uvec1; | |
} | |
# 25903 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25904 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_uint1_sized extension included") | |
# 25904 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
typedef vec<1, uint8, defaultp> u8vec1; | |
typedef vec<1, uint16, defaultp> u16vec1; | |
typedef vec<1, uint32, defaultp> u32vec1; | |
typedef vec<1, uint64, defaultp> u64vec1; | |
} | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25936 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTC_vec1 extension included") | |
# 25936 "glm-amalgamated/glm.h" | |
#endif | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 25941 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTC_type_precision extension included") | |
# 25941 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
# 25954 "glm-amalgamated/glm.h" | |
typedef detail::int8 lowp_int8; | |
typedef detail::int16 lowp_int16; | |
typedef detail::int32 lowp_int32; | |
typedef detail::int64 lowp_int64; | |
typedef detail::int8 lowp_int8_t; | |
typedef detail::int16 lowp_int16_t; | |
typedef detail::int32 lowp_int32_t; | |
typedef detail::int64 lowp_int64_t; | |
typedef detail::int8 lowp_i8; | |
typedef detail::int16 lowp_i16; | |
typedef detail::int32 lowp_i32; | |
typedef detail::int64 lowp_i64; | |
typedef detail::int8 mediump_int8; | |
typedef detail::int16 mediump_int16; | |
typedef detail::int32 mediump_int32; | |
typedef detail::int64 mediump_int64; | |
typedef detail::int8 mediump_int8_t; | |
typedef detail::int16 mediump_int16_t; | |
typedef detail::int32 mediump_int32_t; | |
typedef detail::int64 mediump_int64_t; | |
typedef detail::int8 mediump_i8; | |
typedef detail::int16 mediump_i16; | |
typedef detail::int32 mediump_i32; | |
typedef detail::int64 mediump_i64; | |
typedef detail::int8 highp_int8; | |
typedef detail::int16 highp_int16; | |
typedef detail::int32 highp_int32; | |
typedef detail::int64 highp_int64; | |
typedef detail::int8 highp_int8_t; | |
typedef detail::int16 highp_int16_t; | |
typedef detail::int32 highp_int32_t; | |
typedef detail::int64 highp_int64_t; | |
typedef detail::int8 highp_i8; | |
typedef detail::int16 highp_i16; | |
typedef detail::int32 highp_i32; | |
typedef detail::int64 highp_i64; | |
#if GLM_HAS_EXTENDED_INTEGER_TYPE | |
using std::int8_t; | |
using std::int16_t; | |
using std::int32_t; | |
using std::int64_t; | |
#else | |
typedef detail::int8 int8_t; | |
typedef detail::int16 int16_t; | |
typedef detail::int32 int32_t; | |
typedef detail::int64 int64_t; | |
#endif | |
typedef detail::int8 i8; | |
typedef detail::int16 i16; | |
typedef detail::int32 i32; | |
typedef detail::int64 i64; | |
typedef detail::uint8 lowp_uint8; | |
typedef detail::uint16 lowp_uint16; | |
typedef detail::uint32 lowp_uint32; | |
typedef detail::uint64 lowp_uint64; | |
typedef detail::uint8 lowp_uint8_t; | |
typedef detail::uint16 lowp_uint16_t; | |
typedef detail::uint32 lowp_uint32_t; | |
typedef detail::uint64 lowp_uint64_t; | |
typedef detail::uint8 lowp_u8; | |
typedef detail::uint16 lowp_u16; | |
typedef detail::uint32 lowp_u32; | |
typedef detail::uint64 lowp_u64; | |
typedef detail::uint8 mediump_uint8; | |
typedef detail::uint16 mediump_uint16; | |
typedef detail::uint32 mediump_uint32; | |
typedef detail::uint64 mediump_uint64; | |
typedef detail::uint8 mediump_uint8_t; | |
typedef detail::uint16 mediump_uint16_t; | |
typedef detail::uint32 mediump_uint32_t; | |
typedef detail::uint64 mediump_uint64_t; | |
typedef detail::uint8 mediump_u8; | |
typedef detail::uint16 mediump_u16; | |
typedef detail::uint32 mediump_u32; | |
typedef detail::uint64 mediump_u64; | |
typedef detail::uint8 highp_uint8; | |
typedef detail::uint16 highp_uint16; | |
typedef detail::uint32 highp_uint32; | |
typedef detail::uint64 highp_uint64; | |
typedef detail::uint8 highp_uint8_t; | |
typedef detail::uint16 highp_uint16_t; | |
typedef detail::uint32 highp_uint32_t; | |
typedef detail::uint64 highp_uint64_t; | |
typedef detail::uint8 highp_u8; | |
typedef detail::uint16 highp_u16; | |
typedef detail::uint32 highp_u32; | |
typedef detail::uint64 highp_u64; | |
#if GLM_HAS_EXTENDED_INTEGER_TYPE | |
using std::uint8_t; | |
using std::uint16_t; | |
using std::uint32_t; | |
using std::uint64_t; | |
#else | |
typedef detail::uint8 uint8_t; | |
typedef detail::uint16 uint16_t; | |
typedef detail::uint32 uint32_t; | |
typedef detail::uint64 uint64_t; | |
#endif | |
typedef detail::uint8 u8; | |
typedef detail::uint16 u16; | |
typedef detail::uint32 u32; | |
typedef detail::uint64 u64; | |
typedef float float32; | |
typedef double float64; | |
typedef float32 lowp_float32; | |
typedef float64 lowp_float64; | |
typedef float32 lowp_float32_t; | |
typedef float64 lowp_float64_t; | |
typedef float32 lowp_f32; | |
typedef float64 lowp_f64; | |
typedef float32 lowp_float32; | |
typedef float64 lowp_float64; | |
typedef float32 lowp_float32_t; | |
typedef float64 lowp_float64_t; | |
typedef float32 lowp_f32; | |
typedef float64 lowp_f64; | |
typedef float32 lowp_float32; | |
typedef float64 lowp_float64; | |
typedef float32 lowp_float32_t; | |
typedef float64 lowp_float64_t; | |
typedef float32 lowp_f32; | |
typedef float64 lowp_f64; | |
typedef float32 mediump_float32; | |
typedef float64 mediump_float64; | |
typedef float32 mediump_float32_t; | |
typedef float64 mediump_float64_t; | |
typedef float32 mediump_f32; | |
typedef float64 mediump_f64; | |
typedef float32 highp_float32; | |
typedef float64 highp_float64; | |
typedef float32 highp_float32_t; | |
typedef float64 highp_float64_t; | |
typedef float32 highp_f32; | |
typedef float64 highp_f64; | |
#if(defined(GLM_PRECISION_LOWP_FLOAT)) | |
typedef lowp_float32_t float32_t; | |
typedef lowp_float64_t float64_t; | |
typedef lowp_f32 f32; | |
typedef lowp_f64 f64; | |
#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT)) | |
typedef mediump_float32 float32_t; | |
typedef mediump_float64 float64_t; | |
typedef mediump_float32 f32; | |
typedef mediump_float64 f64; | |
#else | |
typedef highp_float32_t float32_t; | |
typedef highp_float64_t float64_t; | |
typedef highp_float32_t f32; | |
typedef highp_float64_t f64; | |
#endif | |
typedef vec<1, float, lowp> lowp_fvec1; | |
typedef vec<2, float, lowp> lowp_fvec2; | |
typedef vec<3, float, lowp> lowp_fvec3; | |
typedef vec<4, float, lowp> lowp_fvec4; | |
typedef vec<1, float, mediump> mediump_fvec1; | |
typedef vec<2, float, mediump> mediump_fvec2; | |
typedef vec<3, float, mediump> mediump_fvec3; | |
typedef vec<4, float, mediump> mediump_fvec4; | |
typedef vec<1, float, highp> highp_fvec1; | |
typedef vec<2, float, highp> highp_fvec2; | |
typedef vec<3, float, highp> highp_fvec3; | |
typedef vec<4, float, highp> highp_fvec4; | |
typedef vec<1, f32, lowp> lowp_f32vec1; | |
typedef vec<2, f32, lowp> lowp_f32vec2; | |
typedef vec<3, f32, lowp> lowp_f32vec3; | |
typedef vec<4, f32, lowp> lowp_f32vec4; | |
typedef vec<1, f32, mediump> mediump_f32vec1; | |
typedef vec<2, f32, mediump> mediump_f32vec2; | |
typedef vec<3, f32, mediump> mediump_f32vec3; | |
typedef vec<4, f32, mediump> mediump_f32vec4; | |
typedef vec<1, f32, highp> highp_f32vec1; | |
typedef vec<2, f32, highp> highp_f32vec2; | |
typedef vec<3, f32, highp> highp_f32vec3; | |
typedef vec<4, f32, highp> highp_f32vec4; | |
typedef vec<1, f64, lowp> lowp_f64vec1; | |
typedef vec<2, f64, lowp> lowp_f64vec2; | |
typedef vec<3, f64, lowp> lowp_f64vec3; | |
typedef vec<4, f64, lowp> lowp_f64vec4; | |
typedef vec<1, f64, mediump> mediump_f64vec1; | |
typedef vec<2, f64, mediump> mediump_f64vec2; | |
typedef vec<3, f64, mediump> mediump_f64vec3; | |
typedef vec<4, f64, mediump> mediump_f64vec4; | |
typedef vec<1, f64, highp> highp_f64vec1; | |
typedef vec<2, f64, highp> highp_f64vec2; | |
typedef vec<3, f64, highp> highp_f64vec3; | |
typedef vec<4, f64, highp> highp_f64vec4; | |
# 26670 "glm-amalgamated/glm.h" | |
typedef mat<2, 2, f32, lowp> lowp_fmat2x2; | |
typedef mat<2, 3, f32, lowp> lowp_fmat2x3; | |
typedef mat<2, 4, f32, lowp> lowp_fmat2x4; | |
typedef mat<3, 2, f32, lowp> lowp_fmat3x2; | |
typedef mat<3, 3, f32, lowp> lowp_fmat3x3; | |
typedef mat<3, 4, f32, lowp> lowp_fmat3x4; | |
typedef mat<4, 2, f32, lowp> lowp_fmat4x2; | |
typedef mat<4, 3, f32, lowp> lowp_fmat4x3; | |
typedef mat<4, 4, f32, lowp> lowp_fmat4x4; | |
typedef lowp_fmat2x2 lowp_fmat2; | |
typedef lowp_fmat3x3 lowp_fmat3; | |
typedef lowp_fmat4x4 lowp_fmat4; | |
# 26727 "glm-amalgamated/glm.h" | |
typedef mat<2, 2, f32, mediump> mediump_fmat2x2; | |
typedef mat<2, 3, f32, mediump> mediump_fmat2x3; | |
typedef mat<2, 4, f32, mediump> mediump_fmat2x4; | |
typedef mat<3, 2, f32, mediump> mediump_fmat3x2; | |
typedef mat<3, 3, f32, mediump> mediump_fmat3x3; | |
typedef mat<3, 4, f32, mediump> mediump_fmat3x4; | |
typedef mat<4, 2, f32, mediump> mediump_fmat4x2; | |
typedef mat<4, 3, f32, mediump> mediump_fmat4x3; | |
typedef mat<4, 4, f32, mediump> mediump_fmat4x4; | |
typedef mediump_fmat2x2 mediump_fmat2; | |
typedef mediump_fmat3x3 mediump_fmat3; | |
typedef mediump_fmat4x4 mediump_fmat4; | |
# 26784 "glm-amalgamated/glm.h" | |
typedef mat<2, 2, f32, highp> highp_fmat2x2; | |
typedef mat<2, 3, f32, highp> highp_fmat2x3; | |
typedef mat<2, 4, f32, highp> highp_fmat2x4; | |
typedef mat<3, 2, f32, highp> highp_fmat3x2; | |
typedef mat<3, 3, f32, highp> highp_fmat3x3; | |
typedef mat<3, 4, f32, highp> highp_fmat3x4; | |
typedef mat<4, 2, f32, highp> highp_fmat4x2; | |
typedef mat<4, 3, f32, highp> highp_fmat4x3; | |
typedef mat<4, 4, f32, highp> highp_fmat4x4; | |
typedef highp_fmat2x2 highp_fmat2; | |
typedef highp_fmat3x3 highp_fmat3; | |
typedef highp_fmat4x4 highp_fmat4; | |
# 26841 "glm-amalgamated/glm.h" | |
typedef mat<2, 2, f32, lowp> lowp_f32mat2x2; | |
typedef mat<2, 3, f32, lowp> lowp_f32mat2x3; | |
typedef mat<2, 4, f32, lowp> lowp_f32mat2x4; | |
typedef mat<3, 2, f32, lowp> lowp_f32mat3x2; | |
typedef mat<3, 3, f32, lowp> lowp_f32mat3x3; | |
typedef mat<3, 4, f32, lowp> lowp_f32mat3x4; | |
typedef mat<4, 2, f32, lowp> lowp_f32mat4x2; | |
typedef mat<4, 3, f32, lowp> lowp_f32mat4x3; | |
typedef mat<4, 4, f32, lowp> lowp_f32mat4x4; | |
typedef lowp_f32mat2x2 lowp_f32mat2; | |
typedef lowp_f32mat3x3 lowp_f32mat3; | |
typedef lowp_f32mat4x4 lowp_f32mat4; | |
# 26898 "glm-amalgamated/glm.h" | |
typedef mat<2, 2, f32, mediump> mediump_f32mat2x2; | |
typedef mat<2, 3, f32, mediump> mediump_f32mat2x3; | |
typedef mat<2, 4, f32, mediump> mediump_f32mat2x4; | |
typedef mat<3, 2, f32, mediump> mediump_f32mat3x2; | |
typedef mat<3, 3, f32, mediump> mediump_f32mat3x3; | |
typedef mat<3, 4, f32, mediump> mediump_f32mat3x4; | |
typedef mat<4, 2, f32, mediump> mediump_f32mat4x2; | |
typedef mat<4, 3, f32, mediump> mediump_f32mat4x3; | |
typedef mat<4, 4, f32, mediump> mediump_f32mat4x4; | |
typedef mediump_f32mat2x2 mediump_f32mat2; | |
typedef mediump_f32mat3x3 mediump_f32mat3; | |
typedef mediump_f32mat4x4 mediump_f32mat4; | |
# 26955 "glm-amalgamated/glm.h" | |
typedef mat<2, 2, f32, highp> highp_f32mat2x2; | |
typedef mat<2, 3, f32, highp> highp_f32mat2x3; | |
typedef mat<2, 4, f32, highp> highp_f32mat2x4; | |
typedef mat<3, 2, f32, highp> highp_f32mat3x2; | |
typedef mat<3, 3, f32, highp> highp_f32mat3x3; | |
typedef mat<3, 4, f32, highp> highp_f32mat3x4; | |
typedef mat<4, 2, f32, highp> highp_f32mat4x2; | |
typedef mat<4, 3, f32, highp> highp_f32mat4x3; | |
typedef mat<4, 4, f32, highp> highp_f32mat4x4; | |
typedef highp_f32mat2x2 highp_f32mat2; | |
typedef highp_f32mat3x3 highp_f32mat3; | |
typedef highp_f32mat4x4 highp_f32mat4; | |
# 27012 "glm-amalgamated/glm.h" | |
typedef mat<2, 2, f64, lowp> lowp_f64mat2x2; | |
typedef mat<2, 3, f64, lowp> lowp_f64mat2x3; | |
typedef mat<2, 4, f64, lowp> lowp_f64mat2x4; | |
typedef mat<3, 2, f64, lowp> lowp_f64mat3x2; | |
typedef mat<3, 3, f64, lowp> lowp_f64mat3x3; | |
typedef mat<3, 4, f64, lowp> lowp_f64mat3x4; | |
typedef mat<4, 2, f64, lowp> lowp_f64mat4x2; | |
typedef mat<4, 3, f64, lowp> lowp_f64mat4x3; | |
typedef mat<4, 4, f64, lowp> lowp_f64mat4x4; | |
typedef lowp_f64mat2x2 lowp_f64mat2; | |
typedef lowp_f64mat3x3 lowp_f64mat3; | |
typedef lowp_f64mat4x4 lowp_f64mat4; | |
# 27069 "glm-amalgamated/glm.h" | |
typedef mat<2, 2, f64, mediump> mediump_f64mat2x2; | |
typedef mat<2, 3, f64, mediump> mediump_f64mat2x3; | |
typedef mat<2, 4, f64, mediump> mediump_f64mat2x4; | |
typedef mat<3, 2, f64, mediump> mediump_f64mat3x2; | |
typedef mat<3, 3, f64, mediump> mediump_f64mat3x3; | |
typedef mat<3, 4, f64, mediump> mediump_f64mat3x4; | |
typedef mat<4, 2, f64, mediump> mediump_f64mat4x2; | |
typedef mat<4, 3, f64, mediump> mediump_f64mat4x3; | |
typedef mat<4, 4, f64, mediump> mediump_f64mat4x4; | |
typedef mediump_f64mat2x2 mediump_f64mat2; | |
typedef mediump_f64mat3x3 mediump_f64mat3; | |
typedef mediump_f64mat4x4 mediump_f64mat4; | |
typedef mat<2, 2, f64, highp> highp_f64mat2x2; | |
typedef mat<2, 3, f64, highp> highp_f64mat2x3; | |
typedef mat<2, 4, f64, highp> highp_f64mat2x4; | |
typedef mat<3, 2, f64, highp> highp_f64mat3x2; | |
typedef mat<3, 3, f64, highp> highp_f64mat3x3; | |
typedef mat<3, 4, f64, highp> highp_f64mat3x4; | |
typedef mat<4, 2, f64, highp> highp_f64mat4x2; | |
typedef mat<4, 3, f64, highp> highp_f64mat4x3; | |
typedef mat<4, 4, f64, highp> highp_f64mat4x4; | |
typedef highp_f64mat2x2 highp_f64mat2; | |
typedef highp_f64mat3x3 highp_f64mat3; | |
typedef highp_f64mat4x4 highp_f64mat4; | |
typedef vec<1, int, lowp> lowp_ivec1; | |
typedef vec<2, int, lowp> lowp_ivec2; | |
typedef vec<3, int, lowp> lowp_ivec3; | |
typedef vec<4, int, lowp> lowp_ivec4; | |
typedef vec<1, int, mediump> mediump_ivec1; | |
typedef vec<2, int, mediump> mediump_ivec2; | |
typedef vec<3, int, mediump> mediump_ivec3; | |
typedef vec<4, int, mediump> mediump_ivec4; | |
typedef vec<1, int, highp> highp_ivec1; | |
typedef vec<2, int, highp> highp_ivec2; | |
typedef vec<3, int, highp> highp_ivec3; | |
typedef vec<4, int, highp> highp_ivec4; | |
typedef vec<1, i8, lowp> lowp_i8vec1; | |
typedef vec<2, i8, lowp> lowp_i8vec2; | |
typedef vec<3, i8, lowp> lowp_i8vec3; | |
typedef vec<4, i8, lowp> lowp_i8vec4; | |
typedef vec<1, i8, mediump> mediump_i8vec1; | |
typedef vec<2, i8, mediump> mediump_i8vec2; | |
typedef vec<3, i8, mediump> mediump_i8vec3; | |
typedef vec<4, i8, mediump> mediump_i8vec4; | |
typedef vec<1, i8, highp> highp_i8vec1; | |
typedef vec<2, i8, highp> highp_i8vec2; | |
typedef vec<3, i8, highp> highp_i8vec3; | |
typedef vec<4, i8, highp> highp_i8vec4; | |
typedef vec<1, i16, lowp> lowp_i16vec1; | |
typedef vec<2, i16, lowp> lowp_i16vec2; | |
typedef vec<3, i16, lowp> lowp_i16vec3; | |
typedef vec<4, i16, lowp> lowp_i16vec4; | |
typedef vec<1, i16, mediump> mediump_i16vec1; | |
typedef vec<2, i16, mediump> mediump_i16vec2; | |
typedef vec<3, i16, mediump> mediump_i16vec3; | |
typedef vec<4, i16, mediump> mediump_i16vec4; | |
typedef vec<1, i16, highp> highp_i16vec1; | |
typedef vec<2, i16, highp> highp_i16vec2; | |
typedef vec<3, i16, highp> highp_i16vec3; | |
typedef vec<4, i16, highp> highp_i16vec4; | |
typedef vec<1, i32, lowp> lowp_i32vec1; | |
typedef vec<2, i32, lowp> lowp_i32vec2; | |
typedef vec<3, i32, lowp> lowp_i32vec3; | |
typedef vec<4, i32, lowp> lowp_i32vec4; | |
typedef vec<1, i32, mediump> mediump_i32vec1; | |
typedef vec<2, i32, mediump> mediump_i32vec2; | |
typedef vec<3, i32, mediump> mediump_i32vec3; | |
typedef vec<4, i32, mediump> mediump_i32vec4; | |
typedef vec<1, i32, highp> highp_i32vec1; | |
typedef vec<2, i32, highp> highp_i32vec2; | |
typedef vec<3, i32, highp> highp_i32vec3; | |
typedef vec<4, i32, highp> highp_i32vec4; | |
typedef vec<1, i64, lowp> lowp_i64vec1; | |
typedef vec<2, i64, lowp> lowp_i64vec2; | |
typedef vec<3, i64, lowp> lowp_i64vec3; | |
typedef vec<4, i64, lowp> lowp_i64vec4; | |
typedef vec<1, i64, mediump> mediump_i64vec1; | |
typedef vec<2, i64, mediump> mediump_i64vec2; | |
typedef vec<3, i64, mediump> mediump_i64vec3; | |
typedef vec<4, i64, mediump> mediump_i64vec4; | |
typedef vec<1, i64, highp> highp_i64vec1; | |
typedef vec<2, i64, highp> highp_i64vec2; | |
typedef vec<3, i64, highp> highp_i64vec3; | |
typedef vec<4, i64, highp> highp_i64vec4; | |
typedef vec<1, uint, lowp> lowp_uvec1; | |
typedef vec<2, uint, lowp> lowp_uvec2; | |
typedef vec<3, uint, lowp> lowp_uvec3; | |
typedef vec<4, uint, lowp> lowp_uvec4; | |
typedef vec<1, uint, mediump> mediump_uvec1; | |
typedef vec<2, uint, mediump> mediump_uvec2; | |
typedef vec<3, uint, mediump> mediump_uvec3; | |
typedef vec<4, uint, mediump> mediump_uvec4; | |
typedef vec<1, uint, highp> highp_uvec1; | |
typedef vec<2, uint, highp> highp_uvec2; | |
typedef vec<3, uint, highp> highp_uvec3; | |
typedef vec<4, uint, highp> highp_uvec4; | |
typedef vec<1, u8, lowp> lowp_u8vec1; | |
typedef vec<2, u8, lowp> lowp_u8vec2; | |
typedef vec<3, u8, lowp> lowp_u8vec3; | |
typedef vec<4, u8, lowp> lowp_u8vec4; | |
typedef vec<1, u8, mediump> mediump_u8vec1; | |
typedef vec<2, u8, mediump> mediump_u8vec2; | |
typedef vec<3, u8, mediump> mediump_u8vec3; | |
typedef vec<4, u8, mediump> mediump_u8vec4; | |
typedef vec<1, u8, highp> highp_u8vec1; | |
typedef vec<2, u8, highp> highp_u8vec2; | |
typedef vec<3, u8, highp> highp_u8vec3; | |
typedef vec<4, u8, highp> highp_u8vec4; | |
typedef vec<1, u16, lowp> lowp_u16vec1; | |
typedef vec<2, u16, lowp> lowp_u16vec2; | |
typedef vec<3, u16, lowp> lowp_u16vec3; | |
typedef vec<4, u16, lowp> lowp_u16vec4; | |
typedef vec<1, u16, mediump> mediump_u16vec1; | |
typedef vec<2, u16, mediump> mediump_u16vec2; | |
typedef vec<3, u16, mediump> mediump_u16vec3; | |
typedef vec<4, u16, mediump> mediump_u16vec4; | |
typedef vec<1, u16, highp> highp_u16vec1; | |
typedef vec<2, u16, highp> highp_u16vec2; | |
typedef vec<3, u16, highp> highp_u16vec3; | |
typedef vec<4, u16, highp> highp_u16vec4; | |
typedef vec<1, u32, lowp> lowp_u32vec1; | |
typedef vec<2, u32, lowp> lowp_u32vec2; | |
typedef vec<3, u32, lowp> lowp_u32vec3; | |
typedef vec<4, u32, lowp> lowp_u32vec4; | |
typedef vec<1, u32, mediump> mediump_u32vec1; | |
typedef vec<2, u32, mediump> mediump_u32vec2; | |
typedef vec<3, u32, mediump> mediump_u32vec3; | |
typedef vec<4, u32, mediump> mediump_u32vec4; | |
typedef vec<1, u32, highp> highp_u32vec1; | |
typedef vec<2, u32, highp> highp_u32vec2; | |
typedef vec<3, u32, highp> highp_u32vec3; | |
typedef vec<4, u32, highp> highp_u32vec4; | |
typedef vec<1, u64, lowp> lowp_u64vec1; | |
typedef vec<2, u64, lowp> lowp_u64vec2; | |
typedef vec<3, u64, lowp> lowp_u64vec3; | |
typedef vec<4, u64, lowp> lowp_u64vec4; | |
typedef vec<1, u64, mediump> mediump_u64vec1; | |
typedef vec<2, u64, mediump> mediump_u64vec2; | |
typedef vec<3, u64, mediump> mediump_u64vec3; | |
typedef vec<4, u64, mediump> mediump_u64vec4; | |
typedef vec<1, u64, highp> highp_u64vec1; | |
typedef vec<2, u64, highp> highp_u64vec2; | |
typedef vec<3, u64, highp> highp_u64vec3; | |
typedef vec<4, u64, highp> highp_u64vec4; | |
typedef float32 float32_t; | |
typedef float32 f32; | |
# ifndef GLM_FORCE_SINGLE_ONLY | |
typedef float64 float64_t; | |
typedef float64 f64; | |
# endif | |
typedef vec<1, float, defaultp> fvec1; | |
typedef vec<2, float, defaultp> fvec2; | |
typedef vec<3, float, defaultp> fvec3; | |
typedef vec<4, float, defaultp> fvec4; | |
typedef vec<1, f32, defaultp> f32vec1; | |
typedef vec<2, f32, defaultp> f32vec2; | |
typedef vec<3, f32, defaultp> f32vec3; | |
typedef vec<4, f32, defaultp> f32vec4; | |
# ifndef GLM_FORCE_SINGLE_ONLY | |
typedef vec<1, f64, defaultp> f64vec1; | |
typedef vec<2, f64, defaultp> f64vec2; | |
typedef vec<3, f64, defaultp> f64vec3; | |
typedef vec<4, f64, defaultp> f64vec4; | |
# endif | |
# 27775 "glm-amalgamated/glm.h" | |
typedef mat<2, 2, f32, defaultp> fmat2; | |
typedef mat<3, 3, f32, defaultp> fmat3; | |
typedef mat<4, 4, f32, defaultp> fmat4; | |
# 27792 "glm-amalgamated/glm.h" | |
typedef mat<2, 2, f32, defaultp> fmat2x2; | |
typedef mat<2, 3, f32, defaultp> fmat2x3; | |
typedef mat<2, 4, f32, defaultp> fmat2x4; | |
typedef mat<3, 2, f32, defaultp> fmat3x2; | |
typedef mat<3, 3, f32, defaultp> fmat3x3; | |
typedef mat<3, 4, f32, defaultp> fmat3x4; | |
typedef mat<4, 2, f32, defaultp> fmat4x2; | |
typedef mat<4, 3, f32, defaultp> fmat4x3; | |
typedef mat<4, 4, f32, defaultp> fmat4x4; | |
# 27833 "glm-amalgamated/glm.h" | |
typedef mat<2, 2, f32, defaultp> f32mat2; | |
typedef mat<3, 3, f32, defaultp> f32mat3; | |
typedef mat<4, 4, f32, defaultp> f32mat4; | |
# 27850 "glm-amalgamated/glm.h" | |
typedef mat<2, 2, f32, defaultp> f32mat2x2; | |
typedef mat<2, 3, f32, defaultp> f32mat2x3; | |
typedef mat<2, 4, f32, defaultp> f32mat2x4; | |
typedef mat<3, 2, f32, defaultp> f32mat3x2; | |
typedef mat<3, 3, f32, defaultp> f32mat3x3; | |
typedef mat<3, 4, f32, defaultp> f32mat3x4; | |
typedef mat<4, 2, f32, defaultp> f32mat4x2; | |
typedef mat<4, 3, f32, defaultp> f32mat4x3; | |
typedef mat<4, 4, f32, defaultp> f32mat4x4; | |
# ifndef GLM_FORCE_SINGLE_ONLY | |
typedef mat<2, 2, f64, defaultp> f64mat2; | |
typedef mat<3, 3, f64, defaultp> f64mat3; | |
typedef mat<4, 4, f64, defaultp> f64mat4; | |
# 27910 "glm-amalgamated/glm.h" | |
typedef mat<2, 2, f64, defaultp> f64mat2x2; | |
typedef mat<2, 3, f64, defaultp> f64mat2x3; | |
typedef mat<2, 4, f64, defaultp> f64mat2x4; | |
typedef mat<3, 2, f64, defaultp> f64mat3x2; | |
typedef mat<3, 3, f64, defaultp> f64mat3x3; | |
typedef mat<3, 4, f64, defaultp> f64mat3x4; | |
typedef mat<4, 2, f64, defaultp> f64mat4x2; | |
typedef mat<4, 3, f64, defaultp> f64mat4x3; | |
typedef mat<4, 4, f64, defaultp> f64mat4x4; | |
# endif | |
typedef qua<f32, defaultp> f32quat; | |
typedef qua<f32, lowp> lowp_f32quat; | |
typedef qua<f64, lowp> lowp_f64quat; | |
typedef qua<f32, mediump> mediump_f32quat; | |
# ifndef GLM_FORCE_SINGLE_ONLY | |
typedef qua<f64, mediump> mediump_f64quat; | |
typedef qua<f32, highp> highp_f32quat; | |
typedef qua<f64, highp> highp_f64quat; | |
typedef qua<f64, defaultp> f64quat; | |
# endif | |
} | |
namespace glm | |
{ | |
} | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 27997 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_type_aligned is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 27997 "glm-amalgamated/glm.h" | |
# else | |
# 27999 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_type_aligned extension included") | |
# 27999 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
# 28013 "glm-amalgamated/glm.h" | |
GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1); | |
GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2); | |
GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4); | |
GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8); | |
GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1); | |
GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2); | |
GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4); | |
GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8); | |
GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1); | |
GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2); | |
GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4); | |
GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8); | |
GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1); | |
GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2); | |
GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4); | |
GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8); | |
GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1); | |
GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2); | |
GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4); | |
GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8); | |
GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1); | |
GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2); | |
GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4); | |
GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8); | |
GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1); | |
GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2); | |
GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4); | |
GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8); | |
GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1); | |
GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2); | |
GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4); | |
GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8); | |
GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1); | |
GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2); | |
GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4); | |
GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8); | |
GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1); | |
GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2); | |
GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4); | |
GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8); | |
GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1); | |
GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2); | |
GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4); | |
GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8); | |
GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1); | |
GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2); | |
GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4); | |
GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8); | |
GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4); | |
GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8); | |
GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16); | |
GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16); | |
GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1); | |
GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2); | |
GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4); | |
GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4); | |
GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2); | |
GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4); | |
GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8); | |
GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8); | |
GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4); | |
GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8); | |
GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16); | |
GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16); | |
GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8); | |
GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16); | |
GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32); | |
GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32); | |
GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1); | |
GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2); | |
GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4); | |
GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8); | |
GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1); | |
GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2); | |
GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4); | |
GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8); | |
GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1); | |
GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2); | |
GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4); | |
GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8); | |
GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1); | |
GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2); | |
GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4); | |
GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8); | |
GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1); | |
GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2); | |
GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4); | |
GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8); | |
GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1); | |
GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2); | |
GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4); | |
GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8); | |
GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1); | |
GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2); | |
GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4); | |
GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8); | |
GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1); | |
GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2); | |
GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4); | |
GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8); | |
GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1); | |
GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2); | |
GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4); | |
GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8); | |
GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1); | |
GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2); | |
GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4); | |
GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8); | |
GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1); | |
GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2); | |
GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4); | |
GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8); | |
GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1); | |
GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2); | |
GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4); | |
GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8); | |
GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4); | |
GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8); | |
GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16); | |
GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16); | |
GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1); | |
GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2); | |
GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4); | |
GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4); | |
GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2); | |
GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4); | |
GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8); | |
GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8); | |
GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4); | |
GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8); | |
GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16); | |
GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16); | |
GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8); | |
GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16); | |
GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32); | |
GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32); | |
GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4); | |
GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4); | |
GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4); | |
# ifndef GLM_FORCE_SINGLE_ONLY | |
GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8); | |
GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8); | |
GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8); | |
# endif | |
GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4); | |
GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8); | |
GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16); | |
GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16); | |
GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4); | |
GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8); | |
GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16); | |
GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16); | |
GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4); | |
GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8); | |
GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16); | |
GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16); | |
GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8); | |
GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16); | |
GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32); | |
GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32); | |
# ifndef GLM_FORCE_SINGLE_ONLY | |
GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8); | |
GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16); | |
GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32); | |
GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32); | |
# endif | |
# 28721 "glm-amalgamated/glm.h" | |
GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16); | |
GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16); | |
GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16); | |
# 28738 "glm-amalgamated/glm.h" | |
GLM_ALIGNED_TYPEDEF(mat2x2, aligned_mat2x2, 16); | |
GLM_ALIGNED_TYPEDEF(mat3x3, aligned_mat3x3, 16); | |
GLM_ALIGNED_TYPEDEF(mat4x4, aligned_mat4x4, 16); | |
# 28755 "glm-amalgamated/glm.h" | |
GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16); | |
GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16); | |
GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16); | |
# 28772 "glm-amalgamated/glm.h" | |
GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16); | |
GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16); | |
GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16); | |
GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16); | |
GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16); | |
GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16); | |
GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16); | |
GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16); | |
GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16); | |
# 28813 "glm-amalgamated/glm.h" | |
GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16); | |
GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16); | |
GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16); | |
# 28830 "glm-amalgamated/glm.h" | |
GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16); | |
GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16); | |
GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16); | |
GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16); | |
GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16); | |
GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16); | |
GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16); | |
GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16); | |
GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16); | |
# ifndef GLM_FORCE_SINGLE_ONLY | |
GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32); | |
GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32); | |
GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32); | |
# 28890 "glm-amalgamated/glm.h" | |
GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32); | |
GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32); | |
GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32); | |
GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32); | |
GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32); | |
GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32); | |
GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32); | |
GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32); | |
GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32); | |
# endif | |
GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16); | |
GLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16); | |
GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32); | |
GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16); | |
# ifndef GLM_FORCE_SINGLE_ONLY | |
GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32); | |
# endif | |
} | |
namespace glm | |
{ | |
} | |
# 28978 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 28980 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_handed_coordinate_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 28980 "glm-amalgamated/glm.h" | |
# else | |
# 28982 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_handed_coordinate_space extension included") | |
# 28982 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool rightHanded( | |
vec<3, T, Q> const& tangent, | |
vec<3, T, Q> const& binormal, | |
vec<3, T, Q> const& normal); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool leftHanded( | |
vec<3, T, Q> const& tangent, | |
vec<3, T, Q> const& binormal, | |
vec<3, T, Q> const& normal); | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool rightHanded | |
( | |
vec<3, T, Q> const& tangent, | |
vec<3, T, Q> const& binormal, | |
vec<3, T, Q> const& normal | |
) | |
{ | |
return dot(cross(normal, tangent), binormal) > T(0); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool leftHanded | |
( | |
vec<3, T, Q> const& tangent, | |
vec<3, T, Q> const& binormal, | |
vec<3, T, Q> const& normal | |
) | |
{ | |
return dot(cross(normal, tangent), binormal) < T(0); | |
} | |
} | |
# 29065 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 29067 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_optimum_pow is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 29067 "glm-amalgamated/glm.h" | |
# else | |
# 29069 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_optimum_pow extension included") | |
# 29069 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm{ | |
namespace gtx | |
{ | |
template<typename genType> | |
GLM_FUNC_DECL genType pow2(genType const& x); | |
template<typename genType> | |
GLM_FUNC_DECL genType pow3(genType const& x); | |
template<typename genType> | |
GLM_FUNC_DECL genType pow4(genType const& x); | |
} | |
} | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType pow2(genType const& x) | |
{ | |
return x * x; | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType pow3(genType const& x) | |
{ | |
return x * x * x; | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType pow4(genType const& x) | |
{ | |
return (x * x) * (x * x); | |
} | |
} | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 29126 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_spline is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 29126 "glm-amalgamated/glm.h" | |
# else | |
# 29128 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_spline extension included") | |
# 29128 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_DECL genType catmullRom( | |
genType const& v1, | |
genType const& v2, | |
genType const& v3, | |
genType const& v4, | |
typename genType::value_type const& s); | |
template<typename genType> | |
GLM_FUNC_DECL genType hermite( | |
genType const& v1, | |
genType const& t1, | |
genType const& v2, | |
genType const& t2, | |
typename genType::value_type const& s); | |
template<typename genType> | |
GLM_FUNC_DECL genType cubic( | |
genType const& v1, | |
genType const& v2, | |
genType const& v3, | |
genType const& v4, | |
typename genType::value_type const& s); | |
} | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType catmullRom | |
( | |
genType const& v1, | |
genType const& v2, | |
genType const& v3, | |
genType const& v4, | |
typename genType::value_type const& s | |
) | |
{ | |
typename genType::value_type s2 = pow2(s); | |
typename genType::value_type s3 = pow3(s); | |
typename genType::value_type f1 = -s3 + typename genType::value_type(2) * s2 - s; | |
typename genType::value_type f2 = typename genType::value_type(3) * s3 - typename genType::value_type(5) * s2 + typename genType::value_type(2); | |
typename genType::value_type f3 = typename genType::value_type(-3) * s3 + typename genType::value_type(4) * s2 + s; | |
typename genType::value_type f4 = s3 - s2; | |
return (f1 * v1 + f2 * v2 + f3 * v3 + f4 * v4) / typename genType::value_type(2); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType hermite | |
( | |
genType const& v1, | |
genType const& t1, | |
genType const& v2, | |
genType const& t2, | |
typename genType::value_type const& s | |
) | |
{ | |
typename genType::value_type s2 = pow2(s); | |
typename genType::value_type s3 = pow3(s); | |
typename genType::value_type f1 = typename genType::value_type(2) * s3 - typename genType::value_type(3) * s2 + typename genType::value_type(1); | |
typename genType::value_type f2 = typename genType::value_type(-2) * s3 + typename genType::value_type(3) * s2; | |
typename genType::value_type f3 = s3 - typename genType::value_type(2) * s2 + s; | |
typename genType::value_type f4 = s3 - s2; | |
return f1 * v1 + f2 * v2 + f3 * t1 + f4 * t2; | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType cubic | |
( | |
genType const& v1, | |
genType const& v2, | |
genType const& v3, | |
genType const& v4, | |
typename genType::value_type const& s | |
) | |
{ | |
return ((v1 * s + v2) * s + v3) * s + v4; | |
} | |
} | |
# 29245 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 29247 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_matrix_factorisation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 29247 "glm-amalgamated/glm.h" | |
# else | |
# 29249 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_matrix_factorisation extension included") | |
# 29249 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
template <length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_DECL mat<C, R, T, Q> flipud(mat<C, R, T, Q> const& in); | |
template <length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_DECL mat<C, R, T, Q> fliplr(mat<C, R, T, Q> const& in); | |
template <length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_DECL void qr_decompose(mat<C, R, T, Q> const& in, mat<(C < R ? C : R), R, T, Q>& q, mat<C, (C < R ? C : R), T, Q>& r); | |
template <length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_DECL void rq_decompose(mat<C, R, T, Q> const& in, mat<(C < R ? C : R), R, T, Q>& r, mat<C, (C < R ? C : R), T, Q>& q); | |
} | |
namespace glm | |
{ | |
template <length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<C, R, T, Q> flipud(mat<C, R, T, Q> const& in) | |
{ | |
mat<R, C, T, Q> tin = transpose(in); | |
tin = fliplr(tin); | |
mat<C, R, T, Q> out = transpose(tin); | |
return out; | |
} | |
template <length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<C, R, T, Q> fliplr(mat<C, R, T, Q> const& in) | |
{ | |
mat<C, R, T, Q> out; | |
for (length_t i = 0; i < C; i++) | |
{ | |
out[i] = in[(C - i) - 1]; | |
} | |
return out; | |
} | |
template <length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER void qr_decompose(mat<C, R, T, Q> const& in, mat<(C < R ? C : R), R, T, Q>& q, mat<C, (C < R ? C : R), T, Q>& r) | |
{ | |
for (length_t i = 0; i < (C < R ? C : R); i++) | |
{ | |
q[i] = in[i]; | |
for (length_t j = 0; j < i; j++) | |
{ | |
q[i] -= dot(q[i], q[j])*q[j]; | |
r[j][i] = 0; | |
} | |
q[i] = normalize(q[i]); | |
for (length_t j = i; j < C; j++) | |
{ | |
r[j][i] = dot(in[j], q[i]); | |
} | |
} | |
} | |
template <length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER void rq_decompose(mat<C, R, T, Q> const& in, mat<(C < R ? C : R), R, T, Q>& r, mat<C, (C < R ? C : R), T, Q>& q) | |
{ | |
mat<R, C, T, Q> tin = transpose(in); | |
tin = fliplr(tin); | |
mat<R, (C < R ? C : R), T, Q> tr; | |
mat<(C < R ? C : R), C, T, Q> tq; | |
qr_decompose(tin, tq, tr); | |
tr = fliplr(tr); | |
r = transpose(tr); | |
r = fliplr(r); | |
tq = fliplr(tq); | |
q = transpose(tq); | |
} | |
} | |
# 29395 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 29397 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_color_space_YCoCg is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 29397 "glm-amalgamated/glm.h" | |
# else | |
# 29399 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_color_space_YCoCg extension included") | |
# 29399 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> rgb2YCoCg( | |
vec<3, T, Q> const& rgbColor); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> YCoCg2rgb( | |
vec<3, T, Q> const& YCoCgColor); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> rgb2YCoCgR( | |
vec<3, T, Q> const& rgbColor); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> YCoCgR2rgb( | |
vec<3, T, Q> const& YCoCgColor); | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCg | |
( | |
vec<3, T, Q> const& rgbColor | |
) | |
{ | |
vec<3, T, Q> result; | |
result.x = rgbColor.r / T(4) + rgbColor.g / T(2) + rgbColor.b / T(4); | |
result.y = rgbColor.r / T(2) + rgbColor.g * T(0) - rgbColor.b / T(2); | |
result.z = - rgbColor.r / T(4) + rgbColor.g / T(2) - rgbColor.b / T(4); | |
return result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCg2rgb | |
( | |
vec<3, T, Q> const& YCoCgColor | |
) | |
{ | |
vec<3, T, Q> result; | |
result.r = YCoCgColor.x + YCoCgColor.y - YCoCgColor.z; | |
result.g = YCoCgColor.x + YCoCgColor.z; | |
result.b = YCoCgColor.x - YCoCgColor.y - YCoCgColor.z; | |
return result; | |
} | |
template<typename T, qualifier Q, bool isInteger> | |
class compute_YCoCgR { | |
public: | |
static GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR | |
( | |
vec<3, T, Q> const& rgbColor | |
) | |
{ | |
vec<3, T, Q> result; | |
result.x = rgbColor.g * static_cast<T>(0.5) + (rgbColor.r + rgbColor.b) * static_cast<T>(0.25); | |
result.y = rgbColor.r - rgbColor.b; | |
result.z = rgbColor.g - (rgbColor.r + rgbColor.b) * static_cast<T>(0.5); | |
return result; | |
} | |
static GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb | |
( | |
vec<3, T, Q> const& YCoCgRColor | |
) | |
{ | |
vec<3, T, Q> result; | |
T tmp = YCoCgRColor.x - (YCoCgRColor.z * static_cast<T>(0.5)); | |
result.g = YCoCgRColor.z + tmp; | |
result.b = tmp - (YCoCgRColor.y * static_cast<T>(0.5)); | |
result.r = result.b + YCoCgRColor.y; | |
return result; | |
} | |
}; | |
template<typename T, qualifier Q> | |
class compute_YCoCgR<T, Q, true> { | |
public: | |
static GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR | |
( | |
vec<3, T, Q> const& rgbColor | |
) | |
{ | |
vec<3, T, Q> result; | |
result.y = rgbColor.r - rgbColor.b; | |
T tmp = rgbColor.b + (result.y >> 1); | |
result.z = rgbColor.g - tmp; | |
result.x = tmp + (result.z >> 1); | |
return result; | |
} | |
static GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb | |
( | |
vec<3, T, Q> const& YCoCgRColor | |
) | |
{ | |
vec<3, T, Q> result; | |
T tmp = YCoCgRColor.x - (YCoCgRColor.z >> 1); | |
result.g = YCoCgRColor.z + tmp; | |
result.b = tmp - (YCoCgRColor.y >> 1); | |
result.r = result.b + YCoCgRColor.y; | |
return result; | |
} | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR | |
( | |
vec<3, T, Q> const& rgbColor | |
) | |
{ | |
return compute_YCoCgR<T, Q, std::numeric_limits<T>::is_integer>::rgb2YCoCgR(rgbColor); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb | |
( | |
vec<3, T, Q> const& YCoCgRColor | |
) | |
{ | |
return compute_YCoCgR<T, Q, std::numeric_limits<T>::is_integer>::YCoCgR2rgb(YCoCgRColor); | |
} | |
} | |
#include <iomanip> | |
#include <ostream> | |
# 29564 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 29565 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTC_matrix_access extension included") | |
# 29565 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_DECL typename genType::row_type row( | |
genType const& m, | |
length_t index); | |
template<typename genType> | |
GLM_FUNC_DECL genType row( | |
genType const& m, | |
length_t index, | |
typename genType::row_type const& x); | |
template<typename genType> | |
GLM_FUNC_DECL typename genType::col_type column( | |
genType const& m, | |
length_t index); | |
template<typename genType> | |
GLM_FUNC_DECL genType column( | |
genType const& m, | |
length_t index, | |
typename genType::col_type const& x); | |
} | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType row | |
( | |
genType const& m, | |
length_t index, | |
typename genType::row_type const& x | |
) | |
{ | |
assert(index >= 0 && index < m[0].length()); | |
genType Result = m; | |
for(length_t i = 0; i < m.length(); ++i) | |
Result[i][index] = x[i]; | |
return Result; | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER typename genType::row_type row | |
( | |
genType const& m, | |
length_t index | |
) | |
{ | |
assert(index >= 0 && index < m[0].length()); | |
typename genType::row_type Result(0); | |
for(length_t i = 0; i < m.length(); ++i) | |
Result[i] = m[i][index]; | |
return Result; | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType column | |
( | |
genType const& m, | |
length_t index, | |
typename genType::col_type const& x | |
) | |
{ | |
assert(index >= 0 && index < m.length()); | |
genType Result = m; | |
Result[index] = x; | |
return Result; | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER typename genType::col_type column | |
( | |
genType const& m, | |
length_t index | |
) | |
{ | |
assert(index >= 0 && index < m.length()); | |
return m[index]; | |
} | |
} | |
# 29681 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 29683 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_type_trait is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 29683 "glm-amalgamated/glm.h" | |
# else | |
# 29685 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_type_trait extension included") | |
# 29685 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
# 29708 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 29710 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_dual_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 29710 "glm-amalgamated/glm.h" | |
# else | |
# 29712 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_dual_quaternion extension included") | |
# 29712 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
template<typename T, qualifier Q = defaultp> | |
struct tdualquat | |
{ | |
typedef T value_type; | |
typedef qua<T, Q> part_type; | |
qua<T, Q> real, dual; | |
typedef length_t length_type; | |
GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;} | |
GLM_FUNC_DECL part_type & operator[](length_type i); | |
GLM_FUNC_DECL part_type const& operator[](length_type i) const; | |
GLM_FUNC_DECL GLM_CONSTEXPR tdualquat() GLM_DEFAULT; | |
GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat<T, Q> const& d) GLM_DEFAULT; | |
template<qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat<T, P> const& d); | |
GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua<T, Q> const& real); | |
GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua<T, Q> const& orientation, vec<3, T, Q> const& translation); | |
GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua<T, Q> const& real, qua<T, Q> const& dual); | |
template<typename U, qualifier P> | |
GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tdualquat(tdualquat<U, P> const& q); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<2, 4, T, Q> const& holder_mat); | |
GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<3, 4, T, Q> const& aug_mat); | |
GLM_FUNC_DECL tdualquat<T, Q> & operator=(tdualquat<T, Q> const& m) GLM_DEFAULT; | |
template<typename U> | |
GLM_FUNC_DECL tdualquat<T, Q> & operator=(tdualquat<U, Q> const& m); | |
template<typename U> | |
GLM_FUNC_DECL tdualquat<T, Q> & operator*=(U s); | |
template<typename U> | |
GLM_FUNC_DECL tdualquat<T, Q> & operator/=(U s); | |
}; | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL tdualquat<T, Q> operator+(tdualquat<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL tdualquat<T, Q> operator-(tdualquat<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL tdualquat<T, Q> operator+(tdualquat<T, Q> const& q, tdualquat<T, Q> const& p); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL tdualquat<T, Q> operator*(tdualquat<T, Q> const& q, tdualquat<T, Q> const& p); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> operator*(tdualquat<T, Q> const& q, vec<3, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, T, Q> operator*(tdualquat<T, Q> const& q, vec<4, T, Q> const& v); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL tdualquat<T, Q> operator*(tdualquat<T, Q> const& q, T const& s); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL tdualquat<T, Q> operator*(T const& s, tdualquat<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL tdualquat<T, Q> operator/(tdualquat<T, Q> const& q, T const& s); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator==(tdualquat<T, Q> const& q1, tdualquat<T, Q> const& q2); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL bool operator!=(tdualquat<T, Q> const& q1, tdualquat<T, Q> const& q2); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL tdualquat<T, Q> dual_quat_identity(); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL tdualquat<T, Q> normalize(tdualquat<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL tdualquat<T, Q> lerp(tdualquat<T, Q> const& x, tdualquat<T, Q> const& y, T const& a); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL tdualquat<T, Q> inverse(tdualquat<T, Q> const& q); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<2, 4, T, Q> mat2x4_cast(tdualquat<T, Q> const& x); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<3, 4, T, Q> mat3x4_cast(tdualquat<T, Q> const& x); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL tdualquat<T, Q> dualquat_cast(mat<2, 4, T, Q> const& x); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL tdualquat<T, Q> dualquat_cast(mat<3, 4, T, Q> const& x); | |
typedef tdualquat<float, lowp> lowp_dualquat; | |
typedef tdualquat<float, mediump> mediump_dualquat; | |
typedef tdualquat<float, highp> highp_dualquat; | |
typedef tdualquat<float, lowp> lowp_fdualquat; | |
typedef tdualquat<float, mediump> mediump_fdualquat; | |
typedef tdualquat<float, highp> highp_fdualquat; | |
typedef tdualquat<double, lowp> lowp_ddualquat; | |
typedef tdualquat<double, mediump> mediump_ddualquat; | |
typedef tdualquat<double, highp> highp_ddualquat; | |
#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) | |
typedef highp_fdualquat dualquat; | |
typedef highp_fdualquat fdualquat; | |
#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) | |
typedef highp_fdualquat dualquat; | |
typedef highp_fdualquat fdualquat; | |
#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) | |
typedef mediump_fdualquat dualquat; | |
typedef mediump_fdualquat fdualquat; | |
#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT)) | |
typedef lowp_fdualquat dualquat; | |
typedef lowp_fdualquat fdualquat; | |
#else | |
# error "GLM error: multiple default precision requested for single-precision floating-point types" | |
#endif | |
#if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) | |
typedef highp_ddualquat ddualquat; | |
#elif(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) | |
typedef highp_ddualquat ddualquat; | |
#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) | |
typedef mediump_ddualquat ddualquat; | |
#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE)) | |
typedef lowp_ddualquat ddualquat; | |
#else | |
# error "GLM error: Multiple default precision requested for double-precision floating-point types" | |
#endif | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename tdualquat<T, Q>::part_type & tdualquat<T, Q>::operator[](typename tdualquat<T, Q>::length_type i) | |
{ | |
assert(i >= 0 && i < this->length()); | |
return (&real)[i]; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename tdualquat<T, Q>::part_type const& tdualquat<T, Q>::operator[](typename tdualquat<T, Q>::length_type i) const | |
{ | |
assert(i >= 0 && i < this->length()); | |
return (&real)[i]; | |
} | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat() | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS != GLM_DISABLE | |
: real(qua<T, Q>()) | |
, dual(qua<T, Q>(0, 0, 0, 0)) | |
# endif | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(tdualquat<T, Q> const& d) | |
: real(d.real) | |
, dual(d.dual) | |
{} | |
# endif | |
template<typename T, qualifier Q> | |
template<qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(tdualquat<T, P> const& d) | |
: real(d.real) | |
, dual(d.dual) | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(qua<T, Q> const& r) | |
: real(r), dual(qua<T, Q>(0, 0, 0, 0)) | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(qua<T, Q> const& q, vec<3, T, Q> const& p) | |
: real(q), dual( | |
T(-0.5) * ( p.x*q.x + p.y*q.y + p.z*q.z), | |
T(+0.5) * ( p.x*q.w + p.y*q.z - p.z*q.y), | |
T(+0.5) * (-p.x*q.z + p.y*q.w + p.z*q.x), | |
T(+0.5) * ( p.x*q.y - p.y*q.x + p.z*q.w)) | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(qua<T, Q> const& r, qua<T, Q> const& d) | |
: real(r), dual(d) | |
{} | |
template<typename T, qualifier Q> | |
template<typename U, qualifier P> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(tdualquat<U, P> const& q) | |
: real(q.real) | |
, dual(q.dual) | |
{} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(mat<2, 4, T, Q> const& m) | |
{ | |
*this = dualquat_cast(m); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(mat<3, 4, T, Q> const& m) | |
{ | |
*this = dualquat_cast(m); | |
} | |
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> & tdualquat<T, Q>::operator=(tdualquat<T, Q> const& q) | |
{ | |
this->real = q.real; | |
this->dual = q.dual; | |
return *this; | |
} | |
# endif | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> & tdualquat<T, Q>::operator=(tdualquat<U, Q> const& q) | |
{ | |
this->real = q.real; | |
this->dual = q.dual; | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> & tdualquat<T, Q>::operator*=(U s) | |
{ | |
this->real *= static_cast<T>(s); | |
this->dual *= static_cast<T>(s); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
template<typename U> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> & tdualquat<T, Q>::operator/=(U s) | |
{ | |
this->real /= static_cast<T>(s); | |
this->dual /= static_cast<T>(s); | |
return *this; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> operator+(tdualquat<T, Q> const& q) | |
{ | |
return q; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> operator-(tdualquat<T, Q> const& q) | |
{ | |
return tdualquat<T, Q>(-q.real, -q.dual); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> operator+(tdualquat<T, Q> const& q, tdualquat<T, Q> const& p) | |
{ | |
return tdualquat<T, Q>(q.real + p.real,q.dual + p.dual); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> operator*(tdualquat<T, Q> const& p, tdualquat<T, Q> const& o) | |
{ | |
return tdualquat<T, Q>(p.real * o.real,p.real * o.dual + p.dual * o.real); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(tdualquat<T, Q> const& q, vec<3, T, Q> const& v) | |
{ | |
vec<3, T, Q> const real_v3(q.real.x,q.real.y,q.real.z); | |
vec<3, T, Q> const dual_v3(q.dual.x,q.dual.y,q.dual.z); | |
return (cross(real_v3, cross(real_v3,v) + v * q.real.w + dual_v3) + dual_v3 * q.real.w - real_v3 * q.dual.w) * T(2) + v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat<T, Q> const& q) | |
{ | |
return glm::inverse(q) * v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(tdualquat<T, Q> const& q, vec<4, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(q * vec<3, T, Q>(v), v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat<T, Q> const& q) | |
{ | |
return glm::inverse(q) * v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> operator*(tdualquat<T, Q> const& q, T const& s) | |
{ | |
return tdualquat<T, Q>(q.real * s, q.dual * s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> operator*(T const& s, tdualquat<T, Q> const& q) | |
{ | |
return q * s; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> operator/(tdualquat<T, Q> const& q, T const& s) | |
{ | |
return tdualquat<T, Q>(q.real / s, q.dual / s); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator==(tdualquat<T, Q> const& q1, tdualquat<T, Q> const& q2) | |
{ | |
return (q1.real == q2.real) && (q1.dual == q2.dual); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool operator!=(tdualquat<T, Q> const& q1, tdualquat<T, Q> const& q2) | |
{ | |
return (q1.real != q2.real) || (q1.dual != q2.dual); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> dual_quat_identity() | |
{ | |
return tdualquat<T, Q>( | |
qua<T, Q>(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0)), | |
qua<T, Q>(static_cast<T>(0), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0))); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> normalize(tdualquat<T, Q> const& q) | |
{ | |
return q / length(q.real); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> lerp(tdualquat<T, Q> const& x, tdualquat<T, Q> const& y, T const& a) | |
{ | |
assert(a >= static_cast<T>(0)); | |
assert(a <= static_cast<T>(1)); | |
T const k = dot(x.real,y.real) < static_cast<T>(0) ? -a : a; | |
T const one(1); | |
return tdualquat<T, Q>(x * (one - a) + y * k); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> inverse(tdualquat<T, Q> const& q) | |
{ | |
const glm::qua<T, Q> real = conjugate(q.real); | |
const glm::qua<T, Q> dual = conjugate(q.dual); | |
return tdualquat<T, Q>(real, dual + (real * (-2.0f * dot(real,dual)))); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat2x4_cast(tdualquat<T, Q> const& x) | |
{ | |
return mat<2, 4, T, Q>( x[0].x, x[0].y, x[0].z, x[0].w, x[1].x, x[1].y, x[1].z, x[1].w ); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat3x4_cast(tdualquat<T, Q> const& x) | |
{ | |
qua<T, Q> r = x.real / length2(x.real); | |
qua<T, Q> const rr(r.w * x.real.w, r.x * x.real.x, r.y * x.real.y, r.z * x.real.z); | |
r *= static_cast<T>(2); | |
T const xy = r.x * x.real.y; | |
T const xz = r.x * x.real.z; | |
T const yz = r.y * x.real.z; | |
T const wx = r.w * x.real.x; | |
T const wy = r.w * x.real.y; | |
T const wz = r.w * x.real.z; | |
vec<4, T, Q> const a( | |
rr.w + rr.x - rr.y - rr.z, | |
xy - wz, | |
xz + wy, | |
-(x.dual.w * r.x - x.dual.x * r.w + x.dual.y * r.z - x.dual.z * r.y)); | |
vec<4, T, Q> const b( | |
xy + wz, | |
rr.w + rr.y - rr.x - rr.z, | |
yz - wx, | |
-(x.dual.w * r.y - x.dual.x * r.z - x.dual.y * r.w + x.dual.z * r.x)); | |
vec<4, T, Q> const c( | |
xz - wy, | |
yz + wx, | |
rr.w + rr.z - rr.x - rr.y, | |
-(x.dual.w * r.z + x.dual.x * r.y - x.dual.y * r.x - x.dual.z * r.w)); | |
return mat<3, 4, T, Q>(a, b, c); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> dualquat_cast(mat<2, 4, T, Q> const& x) | |
{ | |
return tdualquat<T, Q>( | |
qua<T, Q>( x[0].w, x[0].x, x[0].y, x[0].z ), | |
qua<T, Q>( x[1].w, x[1].x, x[1].y, x[1].z )); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER tdualquat<T, Q> dualquat_cast(mat<3, 4, T, Q> const& x) | |
{ | |
qua<T, Q> real; | |
T const trace = x[0].x + x[1].y + x[2].z; | |
if(trace > static_cast<T>(0)) | |
{ | |
T const r = sqrt(T(1) + trace); | |
T const invr = static_cast<T>(0.5) / r; | |
real.w = static_cast<T>(0.5) * r; | |
real.x = (x[2].y - x[1].z) * invr; | |
real.y = (x[0].z - x[2].x) * invr; | |
real.z = (x[1].x - x[0].y) * invr; | |
} | |
else if(x[0].x > x[1].y && x[0].x > x[2].z) | |
{ | |
T const r = sqrt(T(1) + x[0].x - x[1].y - x[2].z); | |
T const invr = static_cast<T>(0.5) / r; | |
real.x = static_cast<T>(0.5)*r; | |
real.y = (x[1].x + x[0].y) * invr; | |
real.z = (x[0].z + x[2].x) * invr; | |
real.w = (x[2].y - x[1].z) * invr; | |
} | |
else if(x[1].y > x[2].z) | |
{ | |
T const r = sqrt(T(1) + x[1].y - x[0].x - x[2].z); | |
T const invr = static_cast<T>(0.5) / r; | |
real.x = (x[1].x + x[0].y) * invr; | |
real.y = static_cast<T>(0.5) * r; | |
real.z = (x[2].y + x[1].z) * invr; | |
real.w = (x[0].z - x[2].x) * invr; | |
} | |
else | |
{ | |
T const r = sqrt(T(1) + x[2].z - x[0].x - x[1].y); | |
T const invr = static_cast<T>(0.5) / r; | |
real.x = (x[0].z + x[2].x) * invr; | |
real.y = (x[2].y + x[1].z) * invr; | |
real.z = static_cast<T>(0.5) * r; | |
real.w = (x[1].x - x[0].y) * invr; | |
} | |
qua<T, Q> dual; | |
dual.x = static_cast<T>(0.5) * ( x[0].w * real.w + x[1].w * real.z - x[2].w * real.y); | |
dual.y = static_cast<T>(0.5) * (-x[0].w * real.z + x[1].w * real.w + x[2].w * real.x); | |
dual.z = static_cast<T>(0.5) * ( x[0].w * real.y - x[1].w * real.x + x[2].w * real.w); | |
dual.w = -static_cast<T>(0.5) * ( x[0].w * real.x + x[1].w * real.y + x[2].w * real.z); | |
return tdualquat<T, Q>(real, dual); | |
} | |
} | |
namespace glm | |
{ | |
template<typename T> | |
struct type | |
{ | |
static bool const is_vec = false; | |
static bool const is_mat = false; | |
static bool const is_quat = false; | |
static length_t const components = 0; | |
static length_t const cols = 0; | |
static length_t const rows = 0; | |
}; | |
template<length_t L, typename T, qualifier Q> | |
struct type<vec<L, T, Q> > | |
{ | |
static bool const is_vec = true; | |
static bool const is_mat = false; | |
static bool const is_quat = false; | |
static length_t const components = L; | |
}; | |
template<length_t C, length_t R, typename T, qualifier Q> | |
struct type<mat<C, R, T, Q> > | |
{ | |
static bool const is_vec = false; | |
static bool const is_mat = true; | |
static bool const is_quat = false; | |
static length_t const components = C; | |
static length_t const cols = C; | |
static length_t const rows = R; | |
}; | |
template<typename T, qualifier Q> | |
struct type<qua<T, Q> > | |
{ | |
static bool const is_vec = false; | |
static bool const is_mat = false; | |
static bool const is_quat = true; | |
static length_t const components = 4; | |
}; | |
template<typename T, qualifier Q> | |
struct type<tdualquat<T, Q> > | |
{ | |
static bool const is_vec = false; | |
static bool const is_mat = false; | |
static bool const is_quat = true; | |
static length_t const components = 8; | |
}; | |
} | |
namespace glm | |
{ | |
template<typename T> | |
bool const type<T>::is_vec; | |
template<typename T> | |
bool const type<T>::is_mat; | |
template<typename T> | |
bool const type<T>::is_quat; | |
template<typename T> | |
length_t const type<T>::components; | |
template<typename T> | |
length_t const type<T>::cols; | |
template<typename T> | |
length_t const type<T>::rows; | |
template<length_t L, typename T, qualifier Q> | |
bool const type<vec<L, T, Q> >::is_vec; | |
template<length_t L, typename T, qualifier Q> | |
bool const type<vec<L, T, Q> >::is_mat; | |
template<length_t L, typename T, qualifier Q> | |
bool const type<vec<L, T, Q> >::is_quat; | |
template<length_t L, typename T, qualifier Q> | |
length_t const type<vec<L, T, Q> >::components; | |
template<length_t C, length_t R, typename T, qualifier Q> | |
bool const type<mat<C, R, T, Q> >::is_vec; | |
template<length_t C, length_t R, typename T, qualifier Q> | |
bool const type<mat<C, R, T, Q> >::is_mat; | |
template<length_t C, length_t R, typename T, qualifier Q> | |
bool const type<mat<C, R, T, Q> >::is_quat; | |
template<length_t C, length_t R, typename T, qualifier Q> | |
length_t const type<mat<C, R, T, Q> >::components; | |
template<length_t C, length_t R, typename T, qualifier Q> | |
length_t const type<mat<C, R, T, Q> >::cols; | |
template<length_t C, length_t R, typename T, qualifier Q> | |
length_t const type<mat<C, R, T, Q> >::rows; | |
template<typename T, qualifier Q> | |
bool const type<qua<T, Q> >::is_vec; | |
template<typename T, qualifier Q> | |
bool const type<qua<T, Q> >::is_mat; | |
template<typename T, qualifier Q> | |
bool const type<qua<T, Q> >::is_quat; | |
template<typename T, qualifier Q> | |
length_t const type<qua<T, Q> >::components; | |
template<typename T, qualifier Q> | |
bool const type<tdualquat<T, Q> >::is_vec; | |
template<typename T, qualifier Q> | |
bool const type<tdualquat<T, Q> >::is_mat; | |
template<typename T, qualifier Q> | |
bool const type<tdualquat<T, Q> >::is_quat; | |
template<typename T, qualifier Q> | |
length_t const type<tdualquat<T, Q> >::components; | |
} | |
namespace glm{ | |
namespace io | |
{ | |
template<typename CTy> | |
GLM_FUNC_QUALIFIER format_punct<CTy>::format_punct(size_t a) | |
: std::locale::facet(a) | |
, formatted(true) | |
, precision(3) | |
, width(1 + 4 + 1 + precision) | |
, separator(',') | |
, delim_left('[') | |
, delim_right(']') | |
, space(' ') | |
, newline('\n') | |
, order(column_major) | |
{} | |
template<typename CTy> | |
GLM_FUNC_QUALIFIER format_punct<CTy>::format_punct(format_punct const& a) | |
: std::locale::facet(0) | |
, formatted(a.formatted) | |
, precision(a.precision) | |
, width(a.width) | |
, separator(a.separator) | |
, delim_left(a.delim_left) | |
, delim_right(a.delim_right) | |
, space(a.space) | |
, newline(a.newline) | |
, order(a.order) | |
{} | |
template<typename CTy> std::locale::id format_punct<CTy>::id; | |
template<typename CTy, typename CTr> | |
GLM_FUNC_QUALIFIER basic_state_saver<CTy, CTr>::basic_state_saver(std::basic_ios<CTy, CTr>& a) | |
: state_(a) | |
, flags_(a.flags()) | |
, precision_(a.precision()) | |
, width_(a.width()) | |
, fill_(a.fill()) | |
, locale_(a.getloc()) | |
{} | |
template<typename CTy, typename CTr> | |
GLM_FUNC_QUALIFIER basic_state_saver<CTy, CTr>::~basic_state_saver() | |
{ | |
state_.imbue(locale_); | |
state_.fill(fill_); | |
state_.width(width_); | |
state_.precision(precision_); | |
state_.flags(flags_); | |
} | |
template<typename CTy, typename CTr> | |
GLM_FUNC_QUALIFIER basic_format_saver<CTy, CTr>::basic_format_saver(std::basic_ios<CTy, CTr>& a) | |
: bss_(a) | |
{ | |
a.imbue(std::locale(a.getloc(), new format_punct<CTy>(get_facet<format_punct<CTy> >(a)))); | |
} | |
template<typename CTy, typename CTr> | |
GLM_FUNC_QUALIFIER | |
basic_format_saver<CTy, CTr>::~basic_format_saver() | |
{} | |
GLM_FUNC_QUALIFIER precision::precision(unsigned a) | |
: value(a) | |
{} | |
GLM_FUNC_QUALIFIER width::width(unsigned a) | |
: value(a) | |
{} | |
template<typename CTy> | |
GLM_FUNC_QUALIFIER delimeter<CTy>::delimeter(CTy a, CTy b, CTy c) | |
: value() | |
{ | |
value[0] = a; | |
value[1] = b; | |
value[2] = c; | |
} | |
GLM_FUNC_QUALIFIER order::order(order_type a) | |
: value(a) | |
{} | |
template<typename FTy, typename CTy, typename CTr> | |
GLM_FUNC_QUALIFIER FTy const& get_facet(std::basic_ios<CTy, CTr>& ios) | |
{ | |
if(!std::has_facet<FTy>(ios.getloc())) | |
ios.imbue(std::locale(ios.getloc(), new FTy)); | |
return std::use_facet<FTy>(ios.getloc()); | |
} | |
template<typename CTy, typename CTr> | |
GLM_FUNC_QUALIFIER std::basic_ios<CTy, CTr>& formatted(std::basic_ios<CTy, CTr>& ios) | |
{ | |
const_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(ios)).formatted = true; | |
return ios; | |
} | |
template<typename CTy, typename CTr> | |
GLM_FUNC_QUALIFIER std::basic_ios<CTy, CTr>& unformatted(std::basic_ios<CTy, CTr>& ios) | |
{ | |
const_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(ios)).formatted = false; | |
return ios; | |
} | |
template<typename CTy, typename CTr> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, precision const& a) | |
{ | |
const_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)).precision = a.value; | |
return os; | |
} | |
template<typename CTy, typename CTr> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, width const& a) | |
{ | |
const_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)).width = a.value; | |
return os; | |
} | |
template<typename CTy, typename CTr> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, delimeter<CTy> const& a) | |
{ | |
format_punct<CTy> & fmt(const_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os))); | |
fmt.delim_left = a.value[0]; | |
fmt.delim_right = a.value[1]; | |
fmt.separator = a.value[2]; | |
return os; | |
} | |
template<typename CTy, typename CTr> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, order const& a) | |
{ | |
const_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)).order = a.value; | |
return os; | |
} | |
} | |
namespace detail | |
{ | |
template<typename CTy, typename CTr, typename V> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& | |
print_vector_on(std::basic_ostream<CTy, CTr>& os, V const& a) | |
{ | |
typename std::basic_ostream<CTy, CTr>::sentry const cerberus(os); | |
if(cerberus) | |
{ | |
io::format_punct<CTy> const& fmt(io::get_facet<io::format_punct<CTy> >(os)); | |
length_t const& components(type<V>::components); | |
if(fmt.formatted) | |
{ | |
io::basic_state_saver<CTy> const bss(os); | |
os << std::fixed << std::right << std::setprecision(fmt.precision) << std::setfill(fmt.space) << fmt.delim_left; | |
for(length_t i(0); i < components; ++i) | |
{ | |
os << std::setw(fmt.width) << a[i]; | |
if(components-1 != i) | |
os << fmt.separator; | |
} | |
os << fmt.delim_right; | |
} | |
else | |
{ | |
for(length_t i(0); i < components; ++i) | |
{ | |
os << a[i]; | |
if(components-1 != i) | |
os << fmt.space; | |
} | |
} | |
} | |
return os; | |
} | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, qua<T, Q> const& a) | |
{ | |
return detail::print_vector_on(os, a); | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<1, T, Q> const& a) | |
{ | |
return detail::print_vector_on(os, a); | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<2, T, Q> const& a) | |
{ | |
return detail::print_vector_on(os, a); | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<3, T, Q> const& a) | |
{ | |
return detail::print_vector_on(os, a); | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<4, T, Q> const& a) | |
{ | |
return detail::print_vector_on(os, a); | |
} | |
namespace detail | |
{ | |
template<typename CTy, typename CTr, template<length_t, length_t, typename, qualifier> class M, length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& print_matrix_on(std::basic_ostream<CTy, CTr>& os, M<C, R, T, Q> const& a) | |
{ | |
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); | |
if(cerberus) | |
{ | |
io::format_punct<CTy> const& fmt(io::get_facet<io::format_punct<CTy> >(os)); | |
length_t const& cols(type<M<C, R, T, Q> >::cols); | |
length_t const& rows(type<M<C, R, T, Q> >::rows); | |
if(fmt.formatted) | |
{ | |
os << fmt.newline << fmt.delim_left; | |
switch(fmt.order) | |
{ | |
case io::column_major: | |
{ | |
for(length_t i(0); i < rows; ++i) | |
{ | |
if (0 != i) | |
os << fmt.space; | |
os << row(a, i); | |
if(rows-1 != i) | |
os << fmt.newline; | |
} | |
} | |
break; | |
case io::row_major: | |
{ | |
for(length_t i(0); i < cols; ++i) | |
{ | |
if(0 != i) | |
os << fmt.space; | |
os << column(a, i); | |
if(cols-1 != i) | |
os << fmt.newline; | |
} | |
} | |
break; | |
} | |
os << fmt.delim_right; | |
} | |
else | |
{ | |
switch (fmt.order) | |
{ | |
case io::column_major: | |
{ | |
for(length_t i(0); i < cols; ++i) | |
{ | |
os << column(a, i); | |
if(cols - 1 != i) | |
os << fmt.space; | |
} | |
} | |
break; | |
case io::row_major: | |
{ | |
for (length_t i(0); i < rows; ++i) | |
{ | |
os << row(a, i); | |
if (rows-1 != i) | |
os << fmt.space; | |
} | |
} | |
break; | |
} | |
} | |
} | |
return os; | |
} | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<2, 2, T, Q> const& a) | |
{ | |
return detail::print_matrix_on(os, a); | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<2, 3, T, Q> const& a) | |
{ | |
return detail::print_matrix_on(os, a); | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<2, 4, T, Q> const& a) | |
{ | |
return detail::print_matrix_on(os, a); | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<3, 2, T, Q> const& a) | |
{ | |
return detail::print_matrix_on(os, a); | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<3, 3, T, Q> const& a) | |
{ | |
return detail::print_matrix_on(os, a); | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<3, 4, T, Q> const& a) | |
{ | |
return detail::print_matrix_on(os, a); | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<4, 2, T, Q> const& a) | |
{ | |
return detail::print_matrix_on(os, a); | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<4, 3, T, Q> const& a) | |
{ | |
return detail::print_matrix_on(os, a); | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<4, 4, T, Q> const& a) | |
{ | |
return detail::print_matrix_on(os, a); | |
} | |
namespace detail | |
{ | |
template<typename CTy, typename CTr, template<length_t, length_t, typename, qualifier> class M, length_t C, length_t R, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& print_matrix_pair_on(std::basic_ostream<CTy, CTr>& os, std::pair<M<C, R, T, Q> const, M<C, R, T, Q> const> const& a) | |
{ | |
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); | |
if(cerberus) | |
{ | |
io::format_punct<CTy> const& fmt(io::get_facet<io::format_punct<CTy> >(os)); | |
M<C, R, T, Q> const& ml(a.first); | |
M<C, R, T, Q> const& mr(a.second); | |
length_t const& cols(type<M<C, R, T, Q> >::cols); | |
length_t const& rows(type<M<C, R, T, Q> >::rows); | |
if(fmt.formatted) | |
{ | |
os << fmt.newline << fmt.delim_left; | |
switch(fmt.order) | |
{ | |
case io::column_major: | |
{ | |
for(length_t i(0); i < rows; ++i) | |
{ | |
if(0 != i) | |
os << fmt.space; | |
os << row(ml, i) << ((rows-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << row(mr, i); | |
if(rows-1 != i) | |
os << fmt.newline; | |
} | |
} | |
break; | |
case io::row_major: | |
{ | |
for(length_t i(0); i < cols; ++i) | |
{ | |
if(0 != i) | |
os << fmt.space; | |
os << column(ml, i) << ((cols-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << column(mr, i); | |
if(cols-1 != i) | |
os << fmt.newline; | |
} | |
} | |
break; | |
} | |
os << fmt.delim_right; | |
} | |
else | |
{ | |
os << ml << fmt.space << mr; | |
} | |
} | |
return os; | |
} | |
} | |
template<typename CTy, typename CTr, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<( | |
std::basic_ostream<CTy, CTr> & os, | |
std::pair<mat<4, 4, T, Q> const, | |
mat<4, 4, T, Q> const> const& a) | |
{ | |
return detail::print_matrix_pair_on(os, a); | |
} | |
} | |
namespace glm { | |
namespace detail | |
{ | |
template<typename T, qualifier Q, bool Aligned> | |
struct compute_cross_vec2 | |
{ | |
GLM_FUNC_QUALIFIER static T call(vec<2, T, Q> const& v, vec<2, T, Q> const& u) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'cross' accepts only floating-point inputs"); | |
return v.x * u.y - u.x * v.y; | |
} | |
}; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T cross(vec<2, T, Q> const& x, vec<2, T, Q> const& y) | |
{ | |
return detail::compute_cross_vec2<T, Q, detail::is_aligned<Q>::value>::call(x, y); | |
} | |
} | |
namespace glm{ | |
namespace detail | |
{ | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_length2 | |
{ | |
GLM_FUNC_QUALIFIER static T call(vec<L, T, Q> const& v) | |
{ | |
return dot(v, v); | |
} | |
}; | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType length2(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'length2' accepts only floating-point inputs"); | |
return x * x; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T length2(vec<L, T, Q> const& v) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'length2' accepts only floating-point inputs"); | |
return detail::compute_length2<L, T, Q, detail::is_aligned<Q>::value>::call(v); | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER T distance2(T p0, T p1) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'distance2' accepts only floating-point inputs"); | |
return length2(p1 - p0); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T distance2(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'distance2' accepts only floating-point inputs"); | |
return length2(p1 - p0); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b) | |
{ | |
return abs(b.x - a.x) + abs(b.y - a.y) + abs(b.z - a.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& v) | |
{ | |
return abs(v.x) + abs(v.y) + abs(v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b | |
) | |
{ | |
return length(b - a); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& v) | |
{ | |
return length(v); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth) | |
{ | |
return pow(pow(abs(y.x - x.x), T(Depth)) + pow(abs(y.y - x.y), T(Depth)) + pow(abs(y.z - x.z), T(Depth)), T(1) / T(Depth)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& v, unsigned int Depth) | |
{ | |
return pow(pow(abs(v.x), T(Depth)) + pow(abs(v.y), T(Depth)) + pow(abs(v.z), T(Depth)), T(1) / T(Depth)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& a, vec<3, T, Q> const& b) | |
{ | |
return compMax(abs(b - a)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& v) | |
{ | |
return compMax(abs(v)); | |
} | |
} | |
# 30995 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 30997 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_range is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 30997 "glm-amalgamated/glm.h" | |
# else | |
# 30999 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_range extension included") | |
# 30999 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
# 31038 "glm-amalgamated/glm.h" | |
#include <cstring> | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 31041 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTC_type_ptr extension included") | |
# 31041 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_DECL typename genType::value_type const * value_ptr(genType const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<1, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<2, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<3, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<4, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<1, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<2, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<3, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<4, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<1, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<2, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<3, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<4, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<1, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<2, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<3, T, Q> const& v); | |
template <typename T, qualifier Q> | |
GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<4, T, Q> const& v); | |
template<typename T> | |
GLM_FUNC_DECL vec<2, T, defaultp> make_vec2(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL vec<3, T, defaultp> make_vec3(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL vec<4, T, defaultp> make_vec4(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2x2(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL mat<2, 3, T, defaultp> make_mat2x3(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL mat<2, 4, T, defaultp> make_mat2x4(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL mat<3, 2, T, defaultp> make_mat3x2(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3x3(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL mat<3, 4, T, defaultp> make_mat3x4(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 2, T, defaultp> make_mat4x2(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 3, T, defaultp> make_mat4x3(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4x4(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4(T const * const ptr); | |
template<typename T> | |
GLM_FUNC_DECL qua<T, defaultp> make_quat(T const * const ptr); | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T const* value_ptr(vec<2, T, Q> const& v) | |
{ | |
return &(v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T* value_ptr(vec<2, T, Q>& v) | |
{ | |
return &(v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T const * value_ptr(vec<3, T, Q> const& v) | |
{ | |
return &(v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T* value_ptr(vec<3, T, Q>& v) | |
{ | |
return &(v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T const* value_ptr(vec<4, T, Q> const& v) | |
{ | |
return &(v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T* value_ptr(vec<4, T, Q>& v) | |
{ | |
return &(v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 2, T, Q> const& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 2, T, Q>& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 3, T, Q> const& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 3, T, Q>& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 4, T, Q> const& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T* value_ptr(mat<4, 4, T, Q>& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 3, T, Q> const& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 3, T, Q>& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 2, T, Q> const& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 2, T, Q>& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 4, T, Q> const& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 4, T, Q>& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 2, T, Q> const& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T* value_ptr(mat<4, 2, T, Q>& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 4, T, Q> const& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 4, T, Q>& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 3, T, Q> const& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T * value_ptr(mat<4, 3, T, Q>& m) | |
{ | |
return &(m[0].x); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T const * value_ptr(qua<T, Q> const& q) | |
{ | |
return &(q[0]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T* value_ptr(qua<T, Q>& q) | |
{ | |
return &(q[0]); | |
} | |
template <typename T, qualifier Q> | |
inline vec<1, T, Q> make_vec1(vec<1, T, Q> const& v) | |
{ | |
return v; | |
} | |
template <typename T, qualifier Q> | |
inline vec<1, T, Q> make_vec1(vec<2, T, Q> const& v) | |
{ | |
return vec<1, T, Q>(v); | |
} | |
template <typename T, qualifier Q> | |
inline vec<1, T, Q> make_vec1(vec<3, T, Q> const& v) | |
{ | |
return vec<1, T, Q>(v); | |
} | |
template <typename T, qualifier Q> | |
inline vec<1, T, Q> make_vec1(vec<4, T, Q> const& v) | |
{ | |
return vec<1, T, Q>(v); | |
} | |
template <typename T, qualifier Q> | |
inline vec<2, T, Q> make_vec2(vec<1, T, Q> const& v) | |
{ | |
return vec<2, T, Q>(v.x, static_cast<T>(0)); | |
} | |
template <typename T, qualifier Q> | |
inline vec<2, T, Q> make_vec2(vec<2, T, Q> const& v) | |
{ | |
return v; | |
} | |
template <typename T, qualifier Q> | |
inline vec<2, T, Q> make_vec2(vec<3, T, Q> const& v) | |
{ | |
return vec<2, T, Q>(v); | |
} | |
template <typename T, qualifier Q> | |
inline vec<2, T, Q> make_vec2(vec<4, T, Q> const& v) | |
{ | |
return vec<2, T, Q>(v); | |
} | |
template <typename T, qualifier Q> | |
inline vec<3, T, Q> make_vec3(vec<1, T, Q> const& v) | |
{ | |
return vec<3, T, Q>(v.x, static_cast<T>(0), static_cast<T>(0)); | |
} | |
template <typename T, qualifier Q> | |
inline vec<3, T, Q> make_vec3(vec<2, T, Q> const& v) | |
{ | |
return vec<3, T, Q>(v.x, v.y, static_cast<T>(0)); | |
} | |
template <typename T, qualifier Q> | |
inline vec<3, T, Q> make_vec3(vec<3, T, Q> const& v) | |
{ | |
return v; | |
} | |
template <typename T, qualifier Q> | |
inline vec<3, T, Q> make_vec3(vec<4, T, Q> const& v) | |
{ | |
return vec<3, T, Q>(v); | |
} | |
template <typename T, qualifier Q> | |
inline vec<4, T, Q> make_vec4(vec<1, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(v.x, static_cast<T>(0), static_cast<T>(0), static_cast<T>(1)); | |
} | |
template <typename T, qualifier Q> | |
inline vec<4, T, Q> make_vec4(vec<2, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(v.x, v.y, static_cast<T>(0), static_cast<T>(1)); | |
} | |
template <typename T, qualifier Q> | |
inline vec<4, T, Q> make_vec4(vec<3, T, Q> const& v) | |
{ | |
return vec<4, T, Q>(v.x, v.y, v.z, static_cast<T>(1)); | |
} | |
template <typename T, qualifier Q> | |
inline vec<4, T, Q> make_vec4(vec<4, T, Q> const& v) | |
{ | |
return v; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER vec<2, T, defaultp> make_vec2(T const *const ptr) | |
{ | |
vec<2, T, defaultp> Result; | |
memcpy(value_ptr(Result), ptr, sizeof(vec<2, T, defaultp>)); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER vec<3, T, defaultp> make_vec3(T const *const ptr) | |
{ | |
vec<3, T, defaultp> Result; | |
memcpy(value_ptr(Result), ptr, sizeof(vec<3, T, defaultp>)); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER vec<4, T, defaultp> make_vec4(T const *const ptr) | |
{ | |
vec<4, T, defaultp> Result; | |
memcpy(value_ptr(Result), ptr, sizeof(vec<4, T, defaultp>)); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2x2(T const *const ptr) | |
{ | |
mat<2, 2, T, defaultp> Result; | |
memcpy(value_ptr(Result), ptr, sizeof(mat<2, 2, T, defaultp>)); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, defaultp> make_mat2x3(T const *const ptr) | |
{ | |
mat<2, 3, T, defaultp> Result; | |
memcpy(value_ptr(Result), ptr, sizeof(mat<2, 3, T, defaultp>)); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, defaultp> make_mat2x4(T const *const ptr) | |
{ | |
mat<2, 4, T, defaultp> Result; | |
memcpy(value_ptr(Result), ptr, sizeof(mat<2, 4, T, defaultp>)); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, defaultp> make_mat3x2(T const *const ptr) | |
{ | |
mat<3, 2, T, defaultp> Result; | |
memcpy(value_ptr(Result), ptr, sizeof(mat<3, 2, T, defaultp>)); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3x3(T const *const ptr) | |
{ | |
mat<3, 3, T, defaultp> Result; | |
memcpy(value_ptr(Result), ptr, sizeof(mat<3, 3, T, defaultp>)); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, defaultp> make_mat3x4(T const *const ptr) | |
{ | |
mat<3, 4, T, defaultp> Result; | |
memcpy(value_ptr(Result), ptr, sizeof(mat<3, 4, T, defaultp>)); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, defaultp> make_mat4x2(T const *const ptr) | |
{ | |
mat<4, 2, T, defaultp> Result; | |
memcpy(value_ptr(Result), ptr, sizeof(mat<4, 2, T, defaultp>)); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, defaultp> make_mat4x3(T const *const ptr) | |
{ | |
mat<4, 3, T, defaultp> Result; | |
memcpy(value_ptr(Result), ptr, sizeof(mat<4, 3, T, defaultp>)); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4x4(T const *const ptr) | |
{ | |
mat<4, 4, T, defaultp> Result; | |
memcpy(value_ptr(Result), ptr, sizeof(mat<4, 4, T, defaultp>)); | |
return Result; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2(T const *const ptr) | |
{ | |
return make_mat2x2(ptr); | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3(T const *const ptr) | |
{ | |
return make_mat3x3(ptr); | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4(T const *const ptr) | |
{ | |
return make_mat4x4(ptr); | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER qua<T, defaultp> make_quat(T const *const ptr) | |
{ | |
qua<T, defaultp> Result; | |
memcpy(value_ptr(Result), ptr, sizeof(qua<T, defaultp>)); | |
return Result; | |
} | |
} | |
namespace glm | |
{ | |
# if GLM_COMPILER & GLM_COMPILER_VC | |
#pragma warning(push) | |
#pragma warning(disable : 4100) | |
# endif | |
template<typename T, qualifier Q> | |
inline length_t components(vec<1, T, Q> const& v) | |
{ | |
return v.length(); | |
} | |
template<typename T, qualifier Q> | |
inline length_t components(vec<2, T, Q> const& v) | |
{ | |
return v.length(); | |
} | |
template<typename T, qualifier Q> | |
inline length_t components(vec<3, T, Q> const& v) | |
{ | |
return v.length(); | |
} | |
template<typename T, qualifier Q> | |
inline length_t components(vec<4, T, Q> const& v) | |
{ | |
return v.length(); | |
} | |
template<typename genType> | |
inline length_t components(genType const& m) | |
{ | |
return m.length() * m[0].length(); | |
} | |
template<typename genType> | |
inline typename genType::value_type const * begin(genType const& v) | |
{ | |
return value_ptr(v); | |
} | |
template<typename genType> | |
inline typename genType::value_type const * end(genType const& v) | |
{ | |
return begin(v) + components(v); | |
} | |
template<typename genType> | |
inline typename genType::value_type * begin(genType& v) | |
{ | |
return value_ptr(v); | |
} | |
template<typename genType> | |
inline typename genType::value_type * end(genType& v) | |
{ | |
return begin(v) + components(v); | |
} | |
# if GLM_COMPILER & GLM_COMPILER_VC | |
#pragma warning(pop) | |
# endif | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> quat_identity() | |
{ | |
return qua<T, Q>(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& v, qua<T, Q> const& q) | |
{ | |
return inverse(q) * v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> cross(qua<T, Q> const& q, vec<3, T, Q> const& v) | |
{ | |
return q * v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> squad | |
( | |
qua<T, Q> const& q1, | |
qua<T, Q> const& q2, | |
qua<T, Q> const& s1, | |
qua<T, Q> const& s2, | |
T const& h) | |
{ | |
return mix(mix(q1, q2, h), mix(s1, s2, h), static_cast<T>(2) * (static_cast<T>(1) - h) * h); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> intermediate | |
( | |
qua<T, Q> const& prev, | |
qua<T, Q> const& curr, | |
qua<T, Q> const& next | |
) | |
{ | |
qua<T, Q> invQuat = inverse(curr); | |
return exp((log(next * invQuat) + log(prev * invQuat)) / static_cast<T>(-4)) * curr; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> rotate(qua<T, Q> const& q, vec<3, T, Q> const& v) | |
{ | |
return q * v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, T, Q> rotate(qua<T, Q> const& q, vec<4, T, Q> const& v) | |
{ | |
return q * v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T extractRealComponent(qua<T, Q> const& q) | |
{ | |
T w = static_cast<T>(1) - q.x * q.x - q.y * q.y - q.z * q.z; | |
if(w < T(0)) | |
return T(0); | |
else | |
return -sqrt(w); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR T length2(qua<T, Q> const& q) | |
{ | |
return q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> shortMix(qua<T, Q> const& x, qua<T, Q> const& y, T const& a) | |
{ | |
if(a <= static_cast<T>(0)) return x; | |
if(a >= static_cast<T>(1)) return y; | |
T fCos = dot(x, y); | |
qua<T, Q> y2(y); | |
if(fCos < static_cast<T>(0)) | |
{ | |
y2 = -y; | |
fCos = -fCos; | |
} | |
T k0, k1; | |
if(fCos > (static_cast<T>(1) - epsilon<T>())) | |
{ | |
k0 = static_cast<T>(1) - a; | |
k1 = static_cast<T>(0) + a; | |
} | |
else | |
{ | |
T fSin = sqrt(T(1) - fCos * fCos); | |
T fAngle = atan(fSin, fCos); | |
T fOneOverSin = static_cast<T>(1) / fSin; | |
k0 = sin((static_cast<T>(1) - a) * fAngle) * fOneOverSin; | |
k1 = sin((static_cast<T>(0) + a) * fAngle) * fOneOverSin; | |
} | |
return qua<T, Q>( | |
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, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> fastMix(qua<T, Q> const& x, qua<T, Q> const& y, T const& a) | |
{ | |
return glm::normalize(x * (static_cast<T>(1) - a) + (y * a)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> rotation(vec<3, T, Q> const& orig, vec<3, T, Q> const& dest) | |
{ | |
T cosTheta = dot(orig, dest); | |
vec<3, T, Q> rotationAxis; | |
if(cosTheta >= static_cast<T>(1) - epsilon<T>()) { | |
return quat_identity<T,Q>(); | |
} | |
if(cosTheta < static_cast<T>(-1) + epsilon<T>()) | |
{ | |
rotationAxis = cross(vec<3, T, Q>(0, 0, 1), orig); | |
if(length2(rotationAxis) < epsilon<T>()) | |
rotationAxis = cross(vec<3, T, Q>(1, 0, 0), orig); | |
rotationAxis = normalize(rotationAxis); | |
return angleAxis(pi<T>(), rotationAxis); | |
} | |
rotationAxis = cross(orig, dest); | |
T s = sqrt((T(1) + cosTheta) * static_cast<T>(2)); | |
T invs = static_cast<T>(1) / s; | |
return qua<T, Q>( | |
s * static_cast<T>(0.5f), | |
rotationAxis.x * invs, | |
rotationAxis.y * invs, | |
rotationAxis.z * invs); | |
} | |
} | |
namespace glm{ | |
namespace detail | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> combine( | |
vec<3, T, Q> const& a, | |
vec<3, T, Q> const& b, | |
T ascl, T bscl) | |
{ | |
return (a * ascl) + (b * bscl); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> scale(vec<3, T, Q> const& v, T desiredLength) | |
{ | |
return v * desiredLength / length(v); | |
} | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER bool decompose(mat<4, 4, T, Q> const& ModelMatrix, vec<3, T, Q> & Scale, qua<T, Q> & Orientation, vec<3, T, Q> & Translation, vec<3, T, Q> & Skew, vec<4, T, Q> & Perspective) | |
{ | |
mat<4, 4, T, Q> LocalMatrix(ModelMatrix); | |
if(epsilonEqual(LocalMatrix[3][3], static_cast<T>(0), epsilon<T>())) | |
return false; | |
for(length_t i = 0; i < 4; ++i) | |
for(length_t j = 0; j < 4; ++j) | |
LocalMatrix[i][j] /= LocalMatrix[3][3]; | |
mat<4, 4, T, Q> PerspectiveMatrix(LocalMatrix); | |
for(length_t i = 0; i < 3; i++) | |
PerspectiveMatrix[i][3] = static_cast<T>(0); | |
PerspectiveMatrix[3][3] = static_cast<T>(1); | |
if(epsilonEqual(determinant(PerspectiveMatrix), static_cast<T>(0), epsilon<T>())) | |
return false; | |
if( | |
epsilonNotEqual(LocalMatrix[0][3], static_cast<T>(0), epsilon<T>()) || | |
epsilonNotEqual(LocalMatrix[1][3], static_cast<T>(0), epsilon<T>()) || | |
epsilonNotEqual(LocalMatrix[2][3], static_cast<T>(0), epsilon<T>())) | |
{ | |
vec<4, T, Q> RightHandSide; | |
RightHandSide[0] = LocalMatrix[0][3]; | |
RightHandSide[1] = LocalMatrix[1][3]; | |
RightHandSide[2] = LocalMatrix[2][3]; | |
RightHandSide[3] = LocalMatrix[3][3]; | |
mat<4, 4, T, Q> InversePerspectiveMatrix = glm::inverse(PerspectiveMatrix); | |
mat<4, 4, T, Q> TransposedInversePerspectiveMatrix = glm::transpose(InversePerspectiveMatrix); | |
Perspective = TransposedInversePerspectiveMatrix * RightHandSide; | |
LocalMatrix[0][3] = LocalMatrix[1][3] = LocalMatrix[2][3] = static_cast<T>(0); | |
LocalMatrix[3][3] = static_cast<T>(1); | |
} | |
else | |
{ | |
Perspective = vec<4, T, Q>(0, 0, 0, 1); | |
} | |
Translation = vec<3, T, Q>(LocalMatrix[3]); | |
LocalMatrix[3] = vec<4, T, Q>(0, 0, 0, LocalMatrix[3].w); | |
vec<3, T, Q> Row[3], Pdum3; | |
for(length_t i = 0; i < 3; ++i) | |
for(length_t j = 0; j < 3; ++j) | |
Row[i][j] = LocalMatrix[i][j]; | |
Scale.x = length(Row[0]); | |
Row[0] = detail::scale(Row[0], static_cast<T>(1)); | |
Skew.z = dot(Row[0], Row[1]); | |
Row[1] = detail::combine(Row[1], Row[0], static_cast<T>(1), -Skew.z); | |
Scale.y = length(Row[1]); | |
Row[1] = detail::scale(Row[1], static_cast<T>(1)); | |
Skew.z /= Scale.y; | |
Skew.y = glm::dot(Row[0], Row[2]); | |
Row[2] = detail::combine(Row[2], Row[0], static_cast<T>(1), -Skew.y); | |
Skew.x = glm::dot(Row[1], Row[2]); | |
Row[2] = detail::combine(Row[2], Row[1], static_cast<T>(1), -Skew.x); | |
Scale.z = length(Row[2]); | |
Row[2] = detail::scale(Row[2], static_cast<T>(1)); | |
Skew.y /= Scale.z; | |
Skew.x /= Scale.z; | |
Pdum3 = cross(Row[1], Row[2]); | |
if(dot(Row[0], Pdum3) < 0) | |
{ | |
for(length_t i = 0; i < 3; i++) | |
{ | |
Scale[i] *= static_cast<T>(-1); | |
Row[i] *= static_cast<T>(-1); | |
} | |
} | |
# 31982 "glm-amalgamated/glm.h" | |
int i, j, k = 0; | |
T root, trace = Row[0].x + Row[1].y + Row[2].z; | |
if(trace > static_cast<T>(0)) | |
{ | |
root = sqrt(trace + static_cast<T>(1.0)); | |
Orientation.w = static_cast<T>(0.5) * root; | |
root = static_cast<T>(0.5) / root; | |
Orientation.x = root * (Row[1].z - Row[2].y); | |
Orientation.y = root * (Row[2].x - Row[0].z); | |
Orientation.z = root * (Row[0].y - Row[1].x); | |
} | |
else | |
{ | |
static int Next[3] = {1, 2, 0}; | |
i = 0; | |
if(Row[1].y > Row[0].x) i = 1; | |
if(Row[2].z > Row[i][i]) i = 2; | |
j = Next[i]; | |
k = Next[j]; | |
root = sqrt(Row[i][i] - Row[j][j] - Row[k][k] + static_cast<T>(1.0)); | |
Orientation[i] = static_cast<T>(0.5) * root; | |
root = static_cast<T>(0.5) / root; | |
Orientation[j] = root * (Row[i][j] + Row[j][i]); | |
Orientation[k] = root * (Row[i][k] + Row[k][i]); | |
Orientation.w = root * (Row[j][k] - Row[k][j]); | |
} | |
return true; | |
} | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB) | |
{ | |
vec<3, T, Q> const M(0.490f, 0.17697f, 0.2f); | |
vec<3, T, Q> const N(0.31f, 0.8124f, 0.01063f); | |
vec<3, T, Q> const O(0.490f, 0.01f, 0.99f); | |
return (M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB) * static_cast<T>(5.650675255693055f); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB) | |
{ | |
vec<3, T, Q> const M(0.436030342570117f, 0.222438466210245f, 0.013897440074263f); | |
vec<3, T, Q> const N(0.385101860087134f, 0.716942745571917f, 0.097076381494207f); | |
vec<3, T, Q> const O(0.143067806654203f, 0.060618777416563f, 0.713926257896652f); | |
return M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ) | |
{ | |
vec<3, T, Q> const M(0.41847f, -0.091169f, 0.0009209f); | |
vec<3, T, Q> const N(-0.15866f, 0.25243f, 0.015708f); | |
vec<3, T, Q> const O(0.0009209f, -0.0025498f, 0.1786f); | |
return M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ) | |
{ | |
vec<3, T, Q> const M(+1.047844353856414f, +0.029549007606644f, -0.009250984365223f); | |
vec<3, T, Q> const N(+0.022898981050086f, +0.990508028941971f, +0.015072338237051f); | |
vec<3, T, Q> const O(-0.050206647741605f, -0.017074711360960f, +0.751717835079977f); | |
return M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ; | |
} | |
} | |
# 32074 "glm-amalgamated/glm.h" | |
#include <cstdlib> | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 32078 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_std_based_type is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 32078 "glm-amalgamated/glm.h" | |
# else | |
# 32080 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_std_based_type extension included") | |
# 32080 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
typedef vec<1, std::size_t, defaultp> size1; | |
typedef vec<2, std::size_t, defaultp> size2; | |
typedef vec<3, std::size_t, defaultp> size3; | |
typedef vec<4, std::size_t, defaultp> size4; | |
typedef vec<1, std::size_t, defaultp> size1_t; | |
typedef vec<2, std::size_t, defaultp> size2_t; | |
typedef vec<3, std::size_t, defaultp> size3_t; | |
typedef vec<4, std::size_t, defaultp> size4_t; | |
} | |
namespace glm | |
{ | |
} | |
#include <cstdarg> | |
#include <cstdio> | |
namespace glm{ | |
namespace detail | |
{ | |
template <typename T> | |
struct cast | |
{ | |
typedef T value_type; | |
}; | |
template <> | |
struct cast<float> | |
{ | |
typedef double value_type; | |
}; | |
GLM_FUNC_QUALIFIER std::string format(const char* msg, ...) | |
{ | |
std::size_t const STRING_BUFFER(4096); | |
char text[STRING_BUFFER]; | |
va_list list; | |
if(msg == GLM_NULLPTR) | |
return std::string(); | |
va_start(list, msg); | |
# if (GLM_COMPILER & GLM_COMPILER_VC) | |
vsprintf_s(text, STRING_BUFFER, msg, list); | |
# else | |
std::vsprintf(text, msg, list); | |
# endif | |
va_end(list); | |
return std::string(text); | |
} | |
static const char* LabelTrue = "true"; | |
static const char* LabelFalse = "false"; | |
template<typename T, bool isFloat = false> | |
struct literal | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "%d";} | |
}; | |
template<typename T> | |
struct literal<T, true> | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "%f";} | |
}; | |
# if GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC | |
template<> | |
struct literal<uint64_t, false> | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "%lld";} | |
}; | |
template<> | |
struct literal<int64_t, false> | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "%lld";} | |
}; | |
# endif | |
template<typename T> | |
struct prefix{}; | |
template<> | |
struct prefix<float> | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "";} | |
}; | |
template<> | |
struct prefix<double> | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "d";} | |
}; | |
template<> | |
struct prefix<bool> | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "b";} | |
}; | |
template<> | |
struct prefix<uint8_t> | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "u8";} | |
}; | |
template<> | |
struct prefix<int8_t> | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "i8";} | |
}; | |
template<> | |
struct prefix<uint16_t> | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "u16";} | |
}; | |
template<> | |
struct prefix<int16_t> | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "i16";} | |
}; | |
template<> | |
struct prefix<uint32_t> | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "u";} | |
}; | |
template<> | |
struct prefix<int32_t> | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "i";} | |
}; | |
template<> | |
struct prefix<uint64_t> | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "u64";} | |
}; | |
template<> | |
struct prefix<int64_t> | |
{ | |
GLM_FUNC_QUALIFIER static char const * value() {return "i64";} | |
}; | |
template<typename matType> | |
struct compute_to_string | |
{}; | |
template<qualifier Q> | |
struct compute_to_string<vec<1, bool, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(vec<1, bool, Q> const& x) | |
{ | |
return detail::format("bvec1(%s)", | |
x[0] ? detail::LabelTrue : detail::LabelFalse); | |
} | |
}; | |
template<qualifier Q> | |
struct compute_to_string<vec<2, bool, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(vec<2, bool, Q> const& x) | |
{ | |
return detail::format("bvec2(%s, %s)", | |
x[0] ? detail::LabelTrue : detail::LabelFalse, | |
x[1] ? detail::LabelTrue : detail::LabelFalse); | |
} | |
}; | |
template<qualifier Q> | |
struct compute_to_string<vec<3, bool, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(vec<3, bool, Q> const& x) | |
{ | |
return detail::format("bvec3(%s, %s, %s)", | |
x[0] ? detail::LabelTrue : detail::LabelFalse, | |
x[1] ? detail::LabelTrue : detail::LabelFalse, | |
x[2] ? detail::LabelTrue : detail::LabelFalse); | |
} | |
}; | |
template<qualifier Q> | |
struct compute_to_string<vec<4, bool, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(vec<4, bool, Q> const& x) | |
{ | |
return detail::format("bvec4(%s, %s, %s, %s)", | |
x[0] ? detail::LabelTrue : detail::LabelFalse, | |
x[1] ? detail::LabelTrue : detail::LabelFalse, | |
x[2] ? detail::LabelTrue : detail::LabelFalse, | |
x[3] ? detail::LabelTrue : detail::LabelFalse); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<vec<1, T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(vec<1, T, Q> const& x) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%svec1(%s)", | |
PrefixStr, | |
LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(x[0])); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<vec<2, T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(vec<2, T, Q> const& x) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%svec2(%s, %s)", | |
PrefixStr, | |
LiteralStr, LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(x[0]), | |
static_cast<typename cast<T>::value_type>(x[1])); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<vec<3, T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(vec<3, T, Q> const& x) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%svec3(%s, %s, %s)", | |
PrefixStr, | |
LiteralStr, LiteralStr, LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(x[0]), | |
static_cast<typename cast<T>::value_type>(x[1]), | |
static_cast<typename cast<T>::value_type>(x[2])); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<vec<4, T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(vec<4, T, Q> const& x) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%svec4(%s, %s, %s, %s)", | |
PrefixStr, | |
LiteralStr, LiteralStr, LiteralStr, LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(x[0]), | |
static_cast<typename cast<T>::value_type>(x[1]), | |
static_cast<typename cast<T>::value_type>(x[2]), | |
static_cast<typename cast<T>::value_type>(x[3])); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<mat<2, 2, T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(mat<2, 2, T, Q> const& x) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%smat2x2((%s, %s), (%s, %s))", | |
PrefixStr, | |
LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), | |
static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1])); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<mat<2, 3, T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(mat<2, 3, T, Q> const& x) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%smat2x3((%s, %s, %s), (%s, %s, %s))", | |
PrefixStr, | |
LiteralStr, LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), | |
static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2])); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<mat<2, 4, T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(mat<2, 4, T, Q> const& x) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%smat2x4((%s, %s, %s, %s), (%s, %s, %s, %s))", | |
PrefixStr, | |
LiteralStr, LiteralStr, LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, LiteralStr, LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), static_cast<typename cast<T>::value_type>(x[0][3]), | |
static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), static_cast<typename cast<T>::value_type>(x[1][3])); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<mat<3, 2, T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(mat<3, 2, T, Q> const& x) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%smat3x2((%s, %s), (%s, %s), (%s, %s))", | |
PrefixStr, | |
LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), | |
static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), | |
static_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1])); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<mat<3, 3, T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(mat<3, 3, T, Q> const& x) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%smat3x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s))", | |
PrefixStr, | |
LiteralStr, LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), | |
static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), | |
static_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2])); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<mat<3, 4, T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(mat<3, 4, T, Q> const& x) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%smat3x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))", | |
PrefixStr, | |
LiteralStr, LiteralStr, LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, LiteralStr, LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), static_cast<typename cast<T>::value_type>(x[0][3]), | |
static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), static_cast<typename cast<T>::value_type>(x[1][3]), | |
static_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2]), static_cast<typename cast<T>::value_type>(x[2][3])); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<mat<4, 2, T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(mat<4, 2, T, Q> const& x) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%smat4x2((%s, %s), (%s, %s), (%s, %s), (%s, %s))", | |
PrefixStr, | |
LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), | |
static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), | |
static_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), | |
static_cast<typename cast<T>::value_type>(x[3][0]), static_cast<typename cast<T>::value_type>(x[3][1])); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<mat<4, 3, T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(mat<4, 3, T, Q> const& x) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%smat4x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s), (%s, %s, %s))", | |
PrefixStr, | |
LiteralStr, LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), | |
static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), | |
static_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2]), | |
static_cast<typename cast<T>::value_type>(x[3][0]), static_cast<typename cast<T>::value_type>(x[3][1]), static_cast<typename cast<T>::value_type>(x[3][2])); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<mat<4, 4, T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(mat<4, 4, T, Q> const& x) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%smat4x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))", | |
PrefixStr, | |
LiteralStr, LiteralStr, LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, LiteralStr, LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), static_cast<typename cast<T>::value_type>(x[0][3]), | |
static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), static_cast<typename cast<T>::value_type>(x[1][3]), | |
static_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2]), static_cast<typename cast<T>::value_type>(x[2][3]), | |
static_cast<typename cast<T>::value_type>(x[3][0]), static_cast<typename cast<T>::value_type>(x[3][1]), static_cast<typename cast<T>::value_type>(x[3][2]), static_cast<typename cast<T>::value_type>(x[3][3])); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<qua<T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(qua<T, Q> const& q) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%squat(%s, {%s, %s, %s})", | |
PrefixStr, | |
LiteralStr, LiteralStr, LiteralStr, LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(q.w), | |
static_cast<typename cast<T>::value_type>(q.x), | |
static_cast<typename cast<T>::value_type>(q.y), | |
static_cast<typename cast<T>::value_type>(q.z)); | |
} | |
}; | |
template<typename T, qualifier Q> | |
struct compute_to_string<tdualquat<T, Q> > | |
{ | |
GLM_FUNC_QUALIFIER static std::string call(tdualquat<T, Q> const& x) | |
{ | |
char const * PrefixStr = prefix<T>::value(); | |
char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); | |
std::string FormatStr(detail::format("%sdualquat((%s, {%s, %s, %s}), (%s, {%s, %s, %s}))", | |
PrefixStr, | |
LiteralStr, LiteralStr, LiteralStr, LiteralStr, | |
LiteralStr, LiteralStr, LiteralStr, LiteralStr)); | |
return detail::format(FormatStr.c_str(), | |
static_cast<typename cast<T>::value_type>(x.real.w), | |
static_cast<typename cast<T>::value_type>(x.real.x), | |
static_cast<typename cast<T>::value_type>(x.real.y), | |
static_cast<typename cast<T>::value_type>(x.real.z), | |
static_cast<typename cast<T>::value_type>(x.dual.w), | |
static_cast<typename cast<T>::value_type>(x.dual.x), | |
static_cast<typename cast<T>::value_type>(x.dual.y), | |
static_cast<typename cast<T>::value_type>(x.dual.z)); | |
} | |
}; | |
} | |
template<class matType> | |
GLM_FUNC_QUALIFIER std::string to_string(matType const& x) | |
{ | |
return detail::compute_to_string<matType>::call(x); | |
} | |
} | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType angle | |
( | |
genType const& x, | |
genType const& y | |
) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'angle' only accept floating-point inputs"); | |
return acos(clamp(dot(x, y), genType(-1), genType(1))); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T angle(vec<L, T, Q> const& x, vec<L, T, Q> const& y) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'angle' only accept floating-point inputs"); | |
return acos(clamp(dot(x, y), T(-1), T(1))); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'orientedAngle' only accept floating-point inputs"); | |
T const Angle(acos(clamp(dot(x, y), T(-1), T(1)))); | |
if(all(epsilonEqual(y, glm::rotate(x, Angle), T(0.0001)))) | |
return Angle; | |
else | |
return -Angle; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'orientedAngle' only accept floating-point inputs"); | |
T const Angle(acos(clamp(dot(x, y), T(-1), T(1)))); | |
return mix(Angle, -Angle, dot(ref, cross(x, y)) < T(0)); | |
} | |
} | |
namespace glm{ | |
namespace detail | |
{ | |
template<length_t L, typename T, qualifier Q, bool isFloat = true> | |
struct compute_fmod | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& a, vec<L, T, Q> const& b) | |
{ | |
return detail::functor2<vec, L, T, Q>::call(std::fmod, a, b); | |
} | |
}; | |
template<length_t L, typename T, qualifier Q> | |
struct compute_fmod<L, T, Q, false> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& a, vec<L, T, Q> const& b) | |
{ | |
return a % b; | |
} | |
}; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER bool isdenormal(T const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs"); | |
# if GLM_HAS_CXX11_STL | |
return std::fpclassify(x) == FP_SUBNORMAL; | |
# else | |
return epsilonNotEqual(x, static_cast<T>(0), epsilon<T>()) && std::fabs(x) < std::numeric_limits<T>::min(); | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename vec<1, T, Q>::bool_type isdenormal | |
( | |
vec<1, T, Q> const& x | |
) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs"); | |
return typename vec<1, T, Q>::bool_type( | |
isdenormal(x.x)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename vec<2, T, Q>::bool_type isdenormal | |
( | |
vec<2, T, Q> const& x | |
) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs"); | |
return typename vec<2, T, Q>::bool_type( | |
isdenormal(x.x), | |
isdenormal(x.y)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename vec<3, T, Q>::bool_type isdenormal | |
( | |
vec<3, T, Q> const& x | |
) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs"); | |
return typename vec<3, T, Q>::bool_type( | |
isdenormal(x.x), | |
isdenormal(x.y), | |
isdenormal(x.z)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER typename vec<4, T, Q>::bool_type isdenormal | |
( | |
vec<4, T, Q> const& x | |
) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs"); | |
return typename vec<4, T, Q>::bool_type( | |
isdenormal(x.x), | |
isdenormal(x.y), | |
isdenormal(x.z), | |
isdenormal(x.w)); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType fmod(genType x, genType y) | |
{ | |
return fmod(vec<1, genType>(x), y).x; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fmod(vec<L, T, Q> const& x, T y) | |
{ | |
return detail::compute_fmod<L, T, Q, std::numeric_limits<T>::is_iec559>::call(x, vec<L, T, Q>(y)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fmod(vec<L, T, Q> const& x, vec<L, T, Q> const& y) | |
{ | |
return detail::compute_fmod<L, T, Q, std::numeric_limits<T>::is_iec559>::call(x, y); | |
} | |
template <length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, bool, Q> openBounded(vec<L, T, Q> const& Value, vec<L, T, Q> const& Min, vec<L, T, Q> const& Max) | |
{ | |
return greaterThan(Value, Min) && lessThan(Value, Max); | |
} | |
template <length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, bool, Q> closeBounded(vec<L, T, Q> const& Value, vec<L, T, Q> const& Min, vec<L, T, Q> const& Max) | |
{ | |
return greaterThanEqual(Value, Min) && lessThanEqual(Value, Max); | |
} | |
} | |
# 32804 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 32806 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_functions is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 32806 "glm-amalgamated/glm.h" | |
# else | |
# 32808 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_functions extension included") | |
# 32808 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
template<typename T> | |
GLM_FUNC_DECL T gauss( | |
T x, | |
T ExpectedValue, | |
T StandardDeviation); | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL T gauss( | |
vec<2, T, Q> const& Coord, | |
vec<2, T, Q> const& ExpectedValue, | |
vec<2, T, Q> const& StandardDeviation); | |
} | |
namespace glm | |
{ | |
template<typename T> | |
GLM_FUNC_QUALIFIER T gauss | |
( | |
T x, | |
T ExpectedValue, | |
T StandardDeviation | |
) | |
{ | |
return exp(-((x - ExpectedValue) * (x - ExpectedValue)) / (static_cast<T>(2) * StandardDeviation * StandardDeviation)) / (StandardDeviation * sqrt(static_cast<T>(6.28318530717958647692528676655900576))); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T gauss | |
( | |
vec<2, T, Q> const& Coord, | |
vec<2, T, Q> const& ExpectedValue, | |
vec<2, T, Q> const& StandardDeviation | |
) | |
{ | |
vec<2, T, Q> const Squared = ((Coord - ExpectedValue) * (Coord - ExpectedValue)) / (static_cast<T>(2) * StandardDeviation * StandardDeviation); | |
return exp(-(Squared.x + Squared.y)); | |
} | |
} | |
# 32885 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 32887 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_rotate_normalized_axis is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 32887 "glm-amalgamated/glm.h" | |
# else | |
# 32889 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_rotate_normalized_axis extension included") | |
# 32889 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
# 32909 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL mat<4, 4, T, Q> rotateNormalizedAxis( | |
mat<4, 4, T, Q> const& m, | |
T const& angle, | |
vec<3, T, Q> const& axis); | |
# 32922 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL qua<T, Q> rotateNormalizedAxis( | |
qua<T, Q> const& q, | |
T const& angle, | |
vec<3, T, Q> const& axis); | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotateNormalizedAxis | |
( | |
mat<4, 4, T, Q> const& m, | |
T const& angle, | |
vec<3, T, Q> const& v | |
) | |
{ | |
T const a = angle; | |
T const c = cos(a); | |
T const s = sin(a); | |
vec<3, T, Q> const axis(v); | |
vec<3, T, Q> const temp((static_cast<T>(1) - c) * axis); | |
mat<4, 4, T, Q> Rotate; | |
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[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]; | |
mat<4, 4, T, Q> Result; | |
Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; | |
Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; | |
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, qualifier Q> | |
GLM_FUNC_QUALIFIER qua<T, Q> rotateNormalizedAxis | |
( | |
qua<T, Q> const& q, | |
T const& angle, | |
vec<3, T, Q> const& v | |
) | |
{ | |
vec<3, T, Q> const Tmp(v); | |
T const AngleRad(angle); | |
T const Sin = sin(AngleRad * T(0.5)); | |
return q * qua<T, Q>(cos(AngleRad * static_cast<T>(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin); | |
} | |
} | |
# 33008 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 33010 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_easing is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 33010 "glm-amalgamated/glm.h" | |
# else | |
# 33012 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_easing extension included") | |
# 33012 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm{ | |
template <typename genType> | |
GLM_FUNC_DECL genType linearInterpolation(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType quadraticEaseIn(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType quadraticEaseOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType quadraticEaseInOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType cubicEaseIn(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType cubicEaseOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType cubicEaseInOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType quarticEaseIn(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType quarticEaseOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType quarticEaseInOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType quinticEaseIn(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType quinticEaseOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType quinticEaseInOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType sineEaseIn(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType sineEaseOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType sineEaseInOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType circularEaseIn(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType circularEaseOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType circularEaseInOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType exponentialEaseIn(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType exponentialEaseOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType exponentialEaseInOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType elasticEaseIn(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType elasticEaseOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType elasticEaseInOut(genType const & a); | |
template <typename genType> | |
GLM_FUNC_DECL genType backEaseIn(genType const& a); | |
template <typename genType> | |
GLM_FUNC_DECL genType backEaseOut(genType const& a); | |
template <typename genType> | |
GLM_FUNC_DECL genType backEaseInOut(genType const& a); | |
template <typename genType> | |
GLM_FUNC_DECL genType backEaseIn(genType const& a, genType const& o); | |
template <typename genType> | |
GLM_FUNC_DECL genType backEaseOut(genType const& a, genType const& o); | |
template <typename genType> | |
GLM_FUNC_DECL genType backEaseInOut(genType const& a, genType const& o); | |
template <typename genType> | |
GLM_FUNC_DECL genType bounceEaseIn(genType const& a); | |
template <typename genType> | |
GLM_FUNC_DECL genType bounceEaseOut(genType const& a); | |
template <typename genType> | |
GLM_FUNC_DECL genType bounceEaseInOut(genType const& a); | |
} | |
namespace glm{ | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType linearInterpolation(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
return a; | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType quadraticEaseIn(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
return a * a; | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType quadraticEaseOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
return -(a * (a - static_cast<genType>(2))); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType quadraticEaseInOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
if(a < static_cast<genType>(0.5)) | |
{ | |
return static_cast<genType>(2) * a * a; | |
} | |
else | |
{ | |
return (-static_cast<genType>(2) * a * a) + (4 * a) - one<genType>(); | |
} | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType cubicEaseIn(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
return a * a * a; | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType cubicEaseOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
genType const f = a - one<genType>(); | |
return f * f * f + one<genType>(); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType cubicEaseInOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
if (a < static_cast<genType>(0.5)) | |
{ | |
return static_cast<genType>(4) * a * a * a; | |
} | |
else | |
{ | |
genType const f = ((static_cast<genType>(2) * a) - static_cast<genType>(2)); | |
return static_cast<genType>(0.5) * f * f * f + one<genType>(); | |
} | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType quarticEaseIn(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
return a * a * a * a; | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType quarticEaseOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
genType const f = (a - one<genType>()); | |
return f * f * f * (one<genType>() - a) + one<genType>(); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType quarticEaseInOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
if(a < static_cast<genType>(0.5)) | |
{ | |
return static_cast<genType>(8) * a * a * a * a; | |
} | |
else | |
{ | |
genType const f = (a - one<genType>()); | |
return -static_cast<genType>(8) * f * f * f * f + one<genType>(); | |
} | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType quinticEaseIn(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
return a * a * a * a * a; | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType quinticEaseOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
genType const f = (a - one<genType>()); | |
return f * f * f * f * f + one<genType>(); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType quinticEaseInOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
if(a < static_cast<genType>(0.5)) | |
{ | |
return static_cast<genType>(16) * a * a * a * a * a; | |
} | |
else | |
{ | |
genType const f = ((static_cast<genType>(2) * a) - static_cast<genType>(2)); | |
return static_cast<genType>(0.5) * f * f * f * f * f + one<genType>(); | |
} | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType sineEaseIn(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
return sin((a - one<genType>()) * half_pi<genType>()) + one<genType>(); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType sineEaseOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
return sin(a * half_pi<genType>()); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType sineEaseInOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
return static_cast<genType>(0.5) * (one<genType>() - cos(a * pi<genType>())); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType circularEaseIn(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
return one<genType>() - sqrt(one<genType>() - (a * a)); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType circularEaseOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
return sqrt((static_cast<genType>(2) - a) * a); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType circularEaseInOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
if(a < static_cast<genType>(0.5)) | |
{ | |
return static_cast<genType>(0.5) * (one<genType>() - std::sqrt(one<genType>() - static_cast<genType>(4) * (a * a))); | |
} | |
else | |
{ | |
return static_cast<genType>(0.5) * (std::sqrt(-((static_cast<genType>(2) * a) - static_cast<genType>(3)) * ((static_cast<genType>(2) * a) - one<genType>())) + one<genType>()); | |
} | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType exponentialEaseIn(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
if(a <= zero<genType>()) | |
return a; | |
else | |
{ | |
genType const Complementary = a - one<genType>(); | |
genType const Two = static_cast<genType>(2); | |
return glm::pow(Two, Complementary * static_cast<genType>(10)); | |
} | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType exponentialEaseOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
if(a >= one<genType>()) | |
return a; | |
else | |
{ | |
return one<genType>() - glm::pow(static_cast<genType>(2), -static_cast<genType>(10) * a); | |
} | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType exponentialEaseInOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
if(a < static_cast<genType>(0.5)) | |
return static_cast<genType>(0.5) * glm::pow(static_cast<genType>(2), (static_cast<genType>(20) * a) - static_cast<genType>(10)); | |
else | |
return -static_cast<genType>(0.5) * glm::pow(static_cast<genType>(2), (-static_cast<genType>(20) * a) + static_cast<genType>(10)) + one<genType>(); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType elasticEaseIn(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
return std::sin(static_cast<genType>(13) * half_pi<genType>() * a) * glm::pow(static_cast<genType>(2), static_cast<genType>(10) * (a - one<genType>())); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType elasticEaseOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
return std::sin(-static_cast<genType>(13) * half_pi<genType>() * (a + one<genType>())) * glm::pow(static_cast<genType>(2), -static_cast<genType>(10) * a) + one<genType>(); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType elasticEaseInOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
if(a < static_cast<genType>(0.5)) | |
return static_cast<genType>(0.5) * std::sin(static_cast<genType>(13) * half_pi<genType>() * (static_cast<genType>(2) * a)) * glm::pow(static_cast<genType>(2), static_cast<genType>(10) * ((static_cast<genType>(2) * a) - one<genType>())); | |
else | |
return static_cast<genType>(0.5) * (std::sin(-static_cast<genType>(13) * half_pi<genType>() * ((static_cast<genType>(2) * a - one<genType>()) + one<genType>())) * glm::pow(static_cast<genType>(2), -static_cast<genType>(10) * (static_cast<genType>(2) * a - one<genType>())) + static_cast<genType>(2)); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType backEaseIn(genType const& a, genType const& o) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
genType z = ((o + one<genType>()) * a) - o; | |
return (a * a * z); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType backEaseOut(genType const& a, genType const& o) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
genType n = a - one<genType>(); | |
genType z = ((o + one<genType>()) * n) + o; | |
return (n * n * z) + one<genType>(); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a, genType const& o) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
genType s = o * static_cast<genType>(1.525); | |
genType x = static_cast<genType>(0.5); | |
genType n = a / static_cast<genType>(0.5); | |
if (n < static_cast<genType>(1)) | |
{ | |
genType z = ((s + static_cast<genType>(1)) * n) - s; | |
genType m = n * n * z; | |
return x * m; | |
} | |
else | |
{ | |
n -= static_cast<genType>(2); | |
genType z = ((s + static_cast<genType>(1)) * n) + s; | |
genType m = (n*n*z) + static_cast<genType>(2); | |
return x * m; | |
} | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType backEaseIn(genType const& a) | |
{ | |
return backEaseIn(a, static_cast<genType>(1.70158)); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType backEaseOut(genType const& a) | |
{ | |
return backEaseOut(a, static_cast<genType>(1.70158)); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a) | |
{ | |
return backEaseInOut(a, static_cast<genType>(1.70158)); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType bounceEaseOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
if(a < static_cast<genType>(4.0 / 11.0)) | |
{ | |
return (static_cast<genType>(121) * a * a) / static_cast<genType>(16); | |
} | |
else if(a < static_cast<genType>(8.0 / 11.0)) | |
{ | |
return (static_cast<genType>(363.0 / 40.0) * a * a) - (static_cast<genType>(99.0 / 10.0) * a) + static_cast<genType>(17.0 / 5.0); | |
} | |
else if(a < static_cast<genType>(9.0 / 10.0)) | |
{ | |
return (static_cast<genType>(4356.0 / 361.0) * a * a) - (static_cast<genType>(35442.0 / 1805.0) * a) + static_cast<genType>(16061.0 / 1805.0); | |
} | |
else | |
{ | |
return (static_cast<genType>(54.0 / 5.0) * a * a) - (static_cast<genType>(513.0 / 25.0) * a) + static_cast<genType>(268.0 / 25.0); | |
} | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType bounceEaseIn(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
return one<genType>() - bounceEaseOut(one<genType>() - a); | |
} | |
template <typename genType> | |
GLM_FUNC_QUALIFIER genType bounceEaseInOut(genType const& a) | |
{ | |
assert(a >= zero<genType>()); | |
assert(a <= one<genType>()); | |
if(a < static_cast<genType>(0.5)) | |
{ | |
return static_cast<genType>(0.5) * (one<genType>() - bounceEaseOut(a * static_cast<genType>(2))); | |
} | |
else | |
{ | |
return static_cast<genType>(0.5) * bounceEaseOut(a * static_cast<genType>(2) - one<genType>()) + static_cast<genType>(0.5); | |
} | |
} | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(vec<3, T, Q> const& v) | |
{ | |
return translate(mat<4, 4, T, Q>(static_cast<T>(1)), v); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(T angle, vec<3, T, Q> const& v) | |
{ | |
return rotate(mat<4, 4, T, Q>(static_cast<T>(1)), angle, v); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(vec<3, T, Q> const& v) | |
{ | |
return scale(mat<4, 4, T, Q>(static_cast<T>(1)), v); | |
} | |
} | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_QUALIFIER bool isfinite( | |
genType const& x) | |
{ | |
# if GLM_HAS_CXX11_STL | |
return std::isfinite(x) != 0; | |
# elif GLM_COMPILER & GLM_COMPILER_VC | |
return _finite(x) != 0; | |
# elif GLM_COMPILER & GLM_COMPILER_GCC && GLM_PLATFORM & GLM_PLATFORM_ANDROID | |
return _isfinite(x) != 0; | |
# else | |
if (std::numeric_limits<genType>::is_integer || std::denorm_absent == std::numeric_limits<genType>::has_denorm) | |
return std::numeric_limits<genType>::min() <= x && std::numeric_limits<genType>::max() >= x; | |
else | |
return -std::numeric_limits<genType>::max() <= x && std::numeric_limits<genType>::max() >= x; | |
# endif | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<1, bool, Q> isfinite( | |
vec<1, T, Q> const& x) | |
{ | |
return vec<1, bool, Q>( | |
isfinite(x.x)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<2, bool, Q> isfinite( | |
vec<2, T, Q> const& x) | |
{ | |
return vec<2, bool, Q>( | |
isfinite(x.x), | |
isfinite(x.y)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, bool, Q> isfinite( | |
vec<3, T, Q> const& x) | |
{ | |
return vec<3, bool, Q>( | |
isfinite(x.x), | |
isfinite(x.y), | |
isfinite(x.z)); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, bool, Q> isfinite( | |
vec<4, T, Q> const& x) | |
{ | |
return vec<4, bool, Q>( | |
isfinite(x.x), | |
isfinite(x.y), | |
isfinite(x.z), | |
isfinite(x.w)); | |
} | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m) | |
{ | |
mat<3, 3, T, Q> r = m; | |
r[0] = normalize(r[0]); | |
T d0 = dot(r[0], r[1]); | |
r[1] -= r[0] * d0; | |
r[1] = normalize(r[1]); | |
T d1 = dot(r[1], r[2]); | |
d0 = dot(r[0], r[2]); | |
r[2] -= r[0] * d0 + r[1] * d1; | |
r[2] = normalize(r[2]); | |
return r; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y) | |
{ | |
return normalize(x - y * dot(y, x)); | |
} | |
} | |
# 33781 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 33782 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_scalar_common extension included") | |
# 33782 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
# 33795 "glm-amalgamated/glm.h" | |
template<typename T> | |
GLM_FUNC_DECL T min(T a, T b, T c); | |
template<typename T> | |
GLM_FUNC_DECL T min(T a, T b, T c, T d); | |
template<typename T> | |
GLM_FUNC_DECL T max(T a, T b, T c); | |
template<typename T> | |
GLM_FUNC_DECL T max(T a, T b, T c, T d); | |
template<typename T> | |
GLM_FUNC_DECL T fmin(T a, T b); | |
template<typename T> | |
GLM_FUNC_DECL T fmin(T a, T b, T c); | |
template<typename T> | |
GLM_FUNC_DECL T fmin(T a, T b, T c, T d); | |
template<typename T> | |
GLM_FUNC_DECL T fmax(T a, T b); | |
template<typename T> | |
GLM_FUNC_DECL T fmax(T a, T b, T C); | |
template<typename T> | |
GLM_FUNC_DECL T fmax(T a, T b, T C, T D); | |
template<typename genType> | |
GLM_FUNC_DECL genType fclamp(genType x, genType minVal, genType maxVal); | |
template<typename genType> | |
GLM_FUNC_DECL genType clamp(genType const& Texcoord); | |
template<typename genType> | |
GLM_FUNC_DECL genType repeat(genType const& Texcoord); | |
template<typename genType> | |
GLM_FUNC_DECL genType mirrorClamp(genType const& Texcoord); | |
template<typename genType> | |
GLM_FUNC_DECL genType mirrorRepeat(genType const& Texcoord); | |
} | |
namespace glm | |
{ | |
template<typename T> | |
GLM_FUNC_QUALIFIER T min(T a, T b, T c) | |
{ | |
return glm::min(glm::min(a, b), c); | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER T min(T a, T b, T c, T d) | |
{ | |
return glm::min(glm::min(a, b), glm::min(c, d)); | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER T max(T a, T b, T c) | |
{ | |
return glm::max(glm::max(a, b), c); | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER T max(T a, T b, T c, T d) | |
{ | |
return glm::max(glm::max(a, b), glm::max(c, d)); | |
} | |
# if GLM_HAS_CXX11_STL | |
using std::fmin; | |
# else | |
template<typename T> | |
GLM_FUNC_QUALIFIER T fmin(T a, T b) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmin' only accept floating-point input"); | |
if (isnan(a)) | |
return b; | |
return min(a, b); | |
} | |
# endif | |
template<typename T> | |
GLM_FUNC_QUALIFIER T fmin(T a, T b, T c) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmin' only accept floating-point input"); | |
if (isnan(a)) | |
return fmin(b, c); | |
if (isnan(b)) | |
return fmin(a, c); | |
if (isnan(c)) | |
return min(a, b); | |
return min(a, b, c); | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER T fmin(T a, T b, T c, T d) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmin' only accept floating-point input"); | |
if (isnan(a)) | |
return fmin(b, c, d); | |
if (isnan(b)) | |
return min(a, fmin(c, d)); | |
if (isnan(c)) | |
return fmin(min(a, b), d); | |
if (isnan(d)) | |
return min(a, b, c); | |
return min(a, b, c, d); | |
} | |
# if GLM_HAS_CXX11_STL | |
using std::fmax; | |
# else | |
template<typename T> | |
GLM_FUNC_QUALIFIER T fmax(T a, T b) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmax' only accept floating-point input"); | |
if (isnan(a)) | |
return b; | |
return max(a, b); | |
} | |
# endif | |
template<typename T> | |
GLM_FUNC_QUALIFIER T fmax(T a, T b, T c) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmax' only accept floating-point input"); | |
if (isnan(a)) | |
return fmax(b, c); | |
if (isnan(b)) | |
return fmax(a, c); | |
if (isnan(c)) | |
return max(a, b); | |
return max(a, b, c); | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER T fmax(T a, T b, T c, T d) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmax' only accept floating-point input"); | |
if (isnan(a)) | |
return fmax(b, c, d); | |
if (isnan(b)) | |
return max(a, fmax(c, d)); | |
if (isnan(c)) | |
return fmax(max(a, b), d); | |
if (isnan(d)) | |
return max(a, b, c); | |
return max(a, b, c, d); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType fclamp(genType x, genType minVal, genType maxVal) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'fclamp' only accept floating-point or integer inputs"); | |
return fmin(fmax(x, minVal), maxVal); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType clamp(genType const& Texcoord) | |
{ | |
return glm::clamp(Texcoord, static_cast<genType>(0), static_cast<genType>(1)); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType repeat(genType const& Texcoord) | |
{ | |
return glm::fract(Texcoord); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType mirrorClamp(genType const& Texcoord) | |
{ | |
return glm::fract(glm::abs(Texcoord)); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType mirrorRepeat(genType const& Texcoord) | |
{ | |
genType const Abs = glm::abs(Texcoord); | |
genType const Clamp = glm::mod(glm::floor(Abs), static_cast<genType>(2)); | |
genType const Floor = glm::floor(Abs); | |
genType const Rest = Abs - Floor; | |
genType const Mirror = Clamp + Rest; | |
return mix(Rest, static_cast<genType>(1) - Rest, Mirror >= static_cast<genType>(1)); | |
} | |
} | |
# 34087 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 34088 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_EXT_vector_common extension included") | |
# 34088 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
# 34101 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max( vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z, vec<L, T, Q> const& w); | |
# 34135 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& x, T y); | |
# 34145 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& x, vec<L, T, Q> const& y); | |
# 34155 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c); | |
# 34165 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d); | |
# 34175 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, T b); | |
# 34185 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b); | |
# 34195 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c); | |
# 34205 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d); | |
# 34215 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> fclamp(vec<L, T, Q> const& x, T minVal, T maxVal); | |
# 34225 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> fclamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal); | |
# 34235 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> clamp(vec<L, T, Q> const& Texcoord); | |
# 34245 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> repeat(vec<L, T, Q> const& Texcoord); | |
# 34255 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> mirrorClamp(vec<L, T, Q> const& Texcoord); | |
# 34265 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> mirrorRepeat(vec<L, T, Q> const& Texcoord); | |
} | |
namespace glm | |
{ | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'min' only accept floating-point or integer inputs"); | |
return glm::min(glm::min(x, y), z); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z, vec<L, T, Q> const& w) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'min' only accept floating-point or integer inputs"); | |
return glm::min(glm::min(x, y), glm::min(z, w)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'max' only accept floating-point or integer inputs"); | |
return glm::max(glm::max(x, y), z); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z, vec<L, T, Q> const& w) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'max' only accept floating-point or integer inputs"); | |
return glm::max(glm::max(x, y), glm::max(z, w)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fmin(vec<L, T, Q> const& a, T b) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmin' only accept floating-point inputs"); | |
return detail::functor2<vec, L, T, Q>::call(fmin, a, vec<L, T, Q>(b)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmin' only accept floating-point inputs"); | |
return detail::functor2<vec, L, T, Q>::call(fmin, a, b); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmin' only accept floating-point inputs"); | |
return fmin(fmin(a, b), c); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmin' only accept floating-point inputs"); | |
return fmin(fmin(a, b), fmin(c, d)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fmax(vec<L, T, Q> const& a, T b) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmax' only accept floating-point inputs"); | |
return detail::functor2<vec, L, T, Q>::call(fmax, a, vec<L, T, Q>(b)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmax' only accept floating-point inputs"); | |
return detail::functor2<vec, L, T, Q>::call(fmax, a, b); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmax' only accept floating-point inputs"); | |
return fmax(fmax(a, b), c); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmax' only accept floating-point inputs"); | |
return fmax(fmax(a, b), fmax(c, d)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fclamp(vec<L, T, Q> const& x, T minVal, T maxVal) | |
{ | |
return fmin(fmax(x, vec<L, T, Q>(minVal)), vec<L, T, Q>(maxVal)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fclamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal) | |
{ | |
return fmin(fmax(x, minVal), maxVal); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> clamp(vec<L, T, Q> const& Texcoord) | |
{ | |
return glm::clamp(Texcoord, vec<L, T, Q>(0), vec<L, T, Q>(1)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> repeat(vec<L, T, Q> const& Texcoord) | |
{ | |
return glm::fract(Texcoord); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> mirrorClamp(vec<L, T, Q> const& Texcoord) | |
{ | |
return glm::fract(glm::abs(Texcoord)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> mirrorRepeat(vec<L, T, Q> const& Texcoord) | |
{ | |
vec<L, T, Q> const Abs = glm::abs(Texcoord); | |
vec<L, T, Q> const Clamp = glm::mod(glm::floor(Abs), vec<L, T, Q>(2)); | |
vec<L, T, Q> const Floor = glm::floor(Abs); | |
vec<L, T, Q> const Rest = Abs - Floor; | |
vec<L, T, Q> const Mirror = Clamp + Rest; | |
return mix(Rest, vec<L, T, Q>(1) - Rest, glm::greaterThanEqual(Mirror, vec<L, T, Q>(1))); | |
} | |
} | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 34402 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_wrap is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 34402 "glm-amalgamated/glm.h" | |
# else | |
# 34404 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_wrap extension included") | |
# 34404 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
} | |
namespace glm | |
{ | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> diagonal2x2 | |
( | |
vec<2, T, Q> const& v | |
) | |
{ | |
mat<2, 2, T, Q> Result(static_cast<T>(1)); | |
Result[0][0] = v[0]; | |
Result[1][1] = v[1]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 3, T, Q> diagonal2x3 | |
( | |
vec<2, T, Q> const& v | |
) | |
{ | |
mat<2, 3, T, Q> Result(static_cast<T>(1)); | |
Result[0][0] = v[0]; | |
Result[1][1] = v[1]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 4, T, Q> diagonal2x4 | |
( | |
vec<2, T, Q> const& v | |
) | |
{ | |
mat<2, 4, T, Q> Result(static_cast<T>(1)); | |
Result[0][0] = v[0]; | |
Result[1][1] = v[1]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 2, T, Q> diagonal3x2 | |
( | |
vec<2, T, Q> const& v | |
) | |
{ | |
mat<3, 2, T, Q> Result(static_cast<T>(1)); | |
Result[0][0] = v[0]; | |
Result[1][1] = v[1]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> diagonal3x3 | |
( | |
vec<3, T, Q> const& v | |
) | |
{ | |
mat<3, 3, T, Q> Result(static_cast<T>(1)); | |
Result[0][0] = v[0]; | |
Result[1][1] = v[1]; | |
Result[2][2] = v[2]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 4, T, Q> diagonal3x4 | |
( | |
vec<3, T, Q> const& v | |
) | |
{ | |
mat<3, 4, T, Q> Result(static_cast<T>(1)); | |
Result[0][0] = v[0]; | |
Result[1][1] = v[1]; | |
Result[2][2] = v[2]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> diagonal4x4 | |
( | |
vec<4, T, Q> const& v | |
) | |
{ | |
mat<4, 4, T, Q> Result(static_cast<T>(1)); | |
Result[0][0] = v[0]; | |
Result[1][1] = v[1]; | |
Result[2][2] = v[2]; | |
Result[3][3] = v[3]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 3, T, Q> diagonal4x3 | |
( | |
vec<3, T, Q> const& v | |
) | |
{ | |
mat<4, 3, T, Q> Result(static_cast<T>(1)); | |
Result[0][0] = v[0]; | |
Result[1][1] = v[1]; | |
Result[2][2] = v[2]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 2, T, Q> diagonal4x2 | |
( | |
vec<2, T, Q> const& v | |
) | |
{ | |
mat<4, 2, T, Q> Result(static_cast<T>(1)); | |
Result[0][0] = v[0]; | |
Result[1][1] = v[1]; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m) | |
{ | |
return mat<2, 2, T, Q>( | |
+m[1][1], -m[1][0], | |
-m[0][1], +m[0][0]); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m) | |
{ | |
T const m00 = determinant(mat<2, 2, T, Q>(m[1][1], m[2][1], m[1][2], m[2][2])); | |
T const m01 = determinant(mat<2, 2, T, Q>(m[0][1], m[2][1], m[0][2], m[2][2])); | |
T const m02 = determinant(mat<2, 2, T, Q>(m[0][1], m[1][1], m[0][2], m[1][2])); | |
T const m10 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][2], m[2][2])); | |
T const m11 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][2], m[2][2])); | |
T const m12 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][2], m[1][2])); | |
T const m20 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][1], m[2][1])); | |
T const m21 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][1], m[2][1])); | |
T const m22 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][1], m[1][1])); | |
return mat<3, 3, T, Q>( | |
+m00, -m01, +m02, | |
-m10, +m11, -m12, | |
+m20, -m21, +m22); | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m) | |
{ | |
T const m00 = determinant(mat<3, 3, T, Q>(m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3])); | |
T const m01 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3])); | |
T const m02 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][1], m[3][3])); | |
T const m03 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2])); | |
T const m10 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3])); | |
T const m11 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3])); | |
T const m12 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[2][0], m[2][1], m[2][3], m[3][0], m[3][1], m[3][3])); | |
T const m13 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2])); | |
T const m20 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[3][1], m[3][2], m[3][3])); | |
T const m21 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[3][0], m[3][2], m[3][3])); | |
T const m22 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3])); | |
T const m23 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[3][0], m[3][1], m[3][2])); | |
T const m30 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3])); | |
T const m31 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3])); | |
T const m32 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[2][0], m[2][1], m[2][3])); | |
T const m33 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2])); | |
return mat<4, 4, T, Q>( | |
+m00, -m01, +m02, -m03, | |
-m10, +m11, -m12, +m13, | |
+m20, -m21, +m22, -m23, | |
-m30, +m31, -m32, +m33); | |
} | |
} | |
namespace glm | |
{ | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, float, Q> floatNormalize(vec<L, T, Q> const& v) | |
{ | |
return vec<L, float, Q>(v) / static_cast<float>(std::numeric_limits<T>::max()); | |
} | |
} | |
# 34625 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 34627 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_scalar_multiplication is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 34627 "glm-amalgamated/glm.h" | |
# else | |
# 34629 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_scalar_multiplication extension included") | |
# 34629 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
#include <type_traits> | |
namespace glm | |
{ | |
template<typename T, typename Vec> | |
using return_type_scalar_multiplication = typename std::enable_if< | |
!std::is_same<T, float>::value | |
&& std::is_arithmetic<T>::value, Vec | |
>::type; | |
#define GLM_IMPLEMENT_SCAL_MULT(Vec) \ | |
template<typename T> \ | |
return_type_scalar_multiplication<T, Vec> \ | |
operator*(T const& s, Vec rh){ \ | |
return rh *= static_cast<float>(s); \ | |
} \ | |
\ | |
template<typename T> \ | |
return_type_scalar_multiplication<T, Vec> \ | |
operator*(Vec lh, T const& s){ \ | |
return lh *= static_cast<float>(s); \ | |
} \ | |
\ | |
template<typename T> \ | |
return_type_scalar_multiplication<T, Vec> \ | |
operator/(Vec lh, T const& s){ \ | |
return lh *= 1.0f / static_cast<float>(s); \ | |
} | |
GLM_IMPLEMENT_SCAL_MULT(vec2) | |
GLM_IMPLEMENT_SCAL_MULT(vec3) | |
GLM_IMPLEMENT_SCAL_MULT(vec4) | |
GLM_IMPLEMENT_SCAL_MULT(mat2) | |
GLM_IMPLEMENT_SCAL_MULT(mat2x3) | |
GLM_IMPLEMENT_SCAL_MULT(mat2x4) | |
GLM_IMPLEMENT_SCAL_MULT(mat3x2) | |
GLM_IMPLEMENT_SCAL_MULT(mat3) | |
GLM_IMPLEMENT_SCAL_MULT(mat3x4) | |
GLM_IMPLEMENT_SCAL_MULT(mat4x2) | |
GLM_IMPLEMENT_SCAL_MULT(mat4x3) | |
GLM_IMPLEMENT_SCAL_MULT(mat4) | |
#undef GLM_IMPLEMENT_SCAL_MULT | |
} | |
namespace glm{ | |
template<typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER U associatedMin(T x, U a, T y, U b) | |
{ | |
return x < y ? a : b; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<2, U, Q> associatedMin | |
( | |
vec<L, T, Q> const& x, vec<L, U, Q> const& a, | |
vec<L, T, Q> const& y, vec<L, U, Q> const& b | |
) | |
{ | |
vec<L, U, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++i) | |
Result[i] = x[i] < y[i] ? a[i] : b[i]; | |
return Result; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin | |
( | |
T x, const vec<L, U, Q>& a, | |
T y, const vec<L, U, Q>& b | |
) | |
{ | |
vec<L, U, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++i) | |
Result[i] = x < y ? a[i] : b[i]; | |
return Result; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin | |
( | |
vec<L, T, Q> const& x, U a, | |
vec<L, T, Q> const& y, U b | |
) | |
{ | |
vec<L, U, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++i) | |
Result[i] = x[i] < y[i] ? a : b; | |
return Result; | |
} | |
template<typename T, typename U> | |
GLM_FUNC_QUALIFIER U associatedMin | |
( | |
T x, U a, | |
T y, U b, | |
T z, U c | |
) | |
{ | |
U Result = x < y ? (x < z ? a : c) : (y < z ? b : c); | |
return Result; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin | |
( | |
vec<L, T, Q> const& x, vec<L, U, Q> const& a, | |
vec<L, T, Q> const& y, vec<L, U, Q> const& b, | |
vec<L, T, Q> const& z, vec<L, U, Q> const& c | |
) | |
{ | |
vec<L, U, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++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> | |
GLM_FUNC_QUALIFIER U associatedMin | |
( | |
T x, U a, | |
T y, U b, | |
T z, U c, | |
T w, U d | |
) | |
{ | |
T Test1 = min(x, y); | |
T Test2 = min(z, w); | |
U Result1 = x < y ? a : b; | |
U Result2 = z < w ? c : d; | |
U Result = Test1 < Test2 ? Result1 : Result2; | |
return Result; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin | |
( | |
vec<L, T, Q> const& x, vec<L, U, Q> const& a, | |
vec<L, T, Q> const& y, vec<L, U, Q> const& b, | |
vec<L, T, Q> const& z, vec<L, U, Q> const& c, | |
vec<L, T, Q> const& w, vec<L, U, Q> const& d | |
) | |
{ | |
vec<L, U, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++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; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin | |
( | |
T x, vec<L, U, Q> const& a, | |
T y, vec<L, U, Q> const& b, | |
T z, vec<L, U, Q> const& c, | |
T w, vec<L, U, Q> const& d | |
) | |
{ | |
T Test1 = min(x, y); | |
T Test2 = min(z, w); | |
vec<L, U, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++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; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin | |
( | |
vec<L, T, Q> const& x, U a, | |
vec<L, T, Q> const& y, U b, | |
vec<L, T, Q> const& z, U c, | |
vec<L, T, Q> const& w, U d | |
) | |
{ | |
vec<L, U, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++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; | |
} | |
template<typename T, typename U> | |
GLM_FUNC_QUALIFIER U associatedMax(T x, U a, T y, U b) | |
{ | |
return x > y ? a : b; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<2, U, Q> associatedMax | |
( | |
vec<L, T, Q> const& x, vec<L, U, Q> const& a, | |
vec<L, T, Q> const& y, vec<L, U, Q> const& b | |
) | |
{ | |
vec<L, U, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++i) | |
Result[i] = x[i] > y[i] ? a[i] : b[i]; | |
return Result; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> associatedMax | |
( | |
T x, vec<L, U, Q> const& a, | |
T y, vec<L, U, Q> const& b | |
) | |
{ | |
vec<L, U, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++i) | |
Result[i] = x > y ? a[i] : b[i]; | |
return Result; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax | |
( | |
vec<L, T, Q> const& x, U a, | |
vec<L, T, Q> const& y, U b | |
) | |
{ | |
vec<L, T, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++i) | |
Result[i] = x[i] > y[i] ? a : b; | |
return Result; | |
} | |
template<typename T, typename U> | |
GLM_FUNC_QUALIFIER U associatedMax | |
( | |
T x, U a, | |
T y, U b, | |
T z, U c | |
) | |
{ | |
U Result = x > y ? (x > z ? a : c) : (y > z ? b : c); | |
return Result; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax | |
( | |
vec<L, T, Q> const& x, vec<L, U, Q> const& a, | |
vec<L, T, Q> const& y, vec<L, U, Q> const& b, | |
vec<L, T, Q> const& z, vec<L, U, Q> const& c | |
) | |
{ | |
vec<L, U, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++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<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> associatedMax | |
( | |
T x, vec<L, U, Q> const& a, | |
T y, vec<L, U, Q> const& b, | |
T z, vec<L, U, Q> const& c | |
) | |
{ | |
vec<L, U, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++i) | |
Result[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]); | |
return Result; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax | |
( | |
vec<L, T, Q> const& x, U a, | |
vec<L, T, Q> const& y, U b, | |
vec<L, T, Q> const& z, U c | |
) | |
{ | |
vec<L, T, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++i) | |
Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c); | |
return Result; | |
} | |
template<typename T, typename U> | |
GLM_FUNC_QUALIFIER U associatedMax | |
( | |
T x, U a, | |
T y, U b, | |
T z, U c, | |
T w, U d | |
) | |
{ | |
T Test1 = max(x, y); | |
T Test2 = max(z, w); | |
U Result1 = x > y ? a : b; | |
U Result2 = z > w ? c : d; | |
U Result = Test1 > Test2 ? Result1 : Result2; | |
return Result; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax | |
( | |
vec<L, T, Q> const& x, vec<L, U, Q> const& a, | |
vec<L, T, Q> const& y, vec<L, U, Q> const& b, | |
vec<L, T, Q> const& z, vec<L, U, Q> const& c, | |
vec<L, T, Q> const& w, vec<L, U, Q> const& d | |
) | |
{ | |
vec<L, U, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++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; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax | |
( | |
T x, vec<L, U, Q> const& a, | |
T y, vec<L, U, Q> const& b, | |
T z, vec<L, U, Q> const& c, | |
T w, vec<L, U, Q> const& d | |
) | |
{ | |
T Test1 = max(x, y); | |
T Test2 = max(z, w); | |
vec<L, U, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++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; | |
} | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax | |
( | |
vec<L, T, Q> const& x, U a, | |
vec<L, T, Q> const& y, U b, | |
vec<L, T, Q> const& z, U c, | |
vec<L, T, Q> const& w, U d | |
) | |
{ | |
vec<L, U, Q> Result; | |
for(length_t i = 0, n = Result.length(); i < n; ++i) | |
{ | |
T Test1 = max(x[i], y[i]); | |
T Test2 = max(z[i], w[i]); | |
U Result1 = x[i] > y[i] ? a : b; | |
U Result2 = z[i] > w[i] ? c : d; | |
Result[i] = Test1 > Test2 ? Result1 : Result2; | |
} | |
return Result; | |
} | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> slerp | |
( | |
vec<3, T, Q> const& x, | |
vec<3, T, Q> const& y, | |
T const& a | |
) | |
{ | |
T CosAlpha = dot(x, y); | |
T Alpha = acos(CosAlpha); | |
T SinAlpha = sin(Alpha); | |
T t1 = sin((static_cast<T>(1) - a) * Alpha) / SinAlpha; | |
T t2 = sin(a * Alpha) / SinAlpha; | |
return x * t1 + y * t2; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<2, T, Q> rotate | |
( | |
vec<2, T, Q> const& v, | |
T const& angle | |
) | |
{ | |
vec<2, T, Q> Result; | |
T const Cos(cos(angle)); | |
T const Sin(sin(angle)); | |
Result.x = v.x * Cos - v.y * Sin; | |
Result.y = v.x * Sin + v.y * Cos; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> rotate | |
( | |
vec<3, T, Q> const& v, | |
T const& angle, | |
vec<3, T, Q> const& normal | |
) | |
{ | |
return mat<3, 3, T, Q>(glm::rotate(angle, normal)) * v; | |
} | |
# 35096 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, T, Q> rotate | |
( | |
vec<4, T, Q> const& v, | |
T const& angle, | |
vec<3, T, Q> const& normal | |
) | |
{ | |
return rotate(angle, normal) * v; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> rotateX | |
( | |
vec<3, T, Q> const& v, | |
T const& angle | |
) | |
{ | |
vec<3, T, Q> Result(v); | |
T const Cos(cos(angle)); | |
T const Sin(sin(angle)); | |
Result.y = v.y * Cos - v.z * Sin; | |
Result.z = v.y * Sin + v.z * Cos; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> rotateY | |
( | |
vec<3, T, Q> const& v, | |
T const& angle | |
) | |
{ | |
vec<3, T, Q> Result = v; | |
T const Cos(cos(angle)); | |
T const Sin(sin(angle)); | |
Result.x = v.x * Cos + v.z * Sin; | |
Result.z = -v.x * Sin + v.z * Cos; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> rotateZ | |
( | |
vec<3, T, Q> const& v, | |
T const& angle | |
) | |
{ | |
vec<3, T, Q> Result = v; | |
T const Cos(cos(angle)); | |
T const Sin(sin(angle)); | |
Result.x = v.x * Cos - v.y * Sin; | |
Result.y = v.x * Sin + v.y * Cos; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, T, Q> rotateX | |
( | |
vec<4, T, Q> const& v, | |
T const& angle | |
) | |
{ | |
vec<4, T, Q> Result = v; | |
T const Cos(cos(angle)); | |
T const Sin(sin(angle)); | |
Result.y = v.y * Cos - v.z * Sin; | |
Result.z = v.y * Sin + v.z * Cos; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, T, Q> rotateY | |
( | |
vec<4, T, Q> const& v, | |
T const& angle | |
) | |
{ | |
vec<4, T, Q> Result = v; | |
T const Cos(cos(angle)); | |
T const Sin(sin(angle)); | |
Result.x = v.x * Cos + v.z * Sin; | |
Result.z = -v.x * Sin + v.z * Cos; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, T, Q> rotateZ | |
( | |
vec<4, T, Q> const& v, | |
T const& angle | |
) | |
{ | |
vec<4, T, Q> Result = v; | |
T const Cos(cos(angle)); | |
T const Sin(sin(angle)); | |
Result.x = v.x * Cos - v.y * Sin; | |
Result.y = v.x * Sin + v.y * Cos; | |
return Result; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientation | |
( | |
vec<3, T, Q> const& Normal, | |
vec<3, T, Q> const& Up | |
) | |
{ | |
if(all(equal(Normal, Up, epsilon<T>()))) | |
return mat<4, 4, T, Q>(static_cast<T>(1)); | |
vec<3, T, Q> RotationAxis = cross(Up, Normal); | |
T Angle = acos(dot(Normal, Up)); | |
return rotate(Angle, RotationAxis); | |
} | |
} | |
# 35234 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 35236 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_mixed_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 35236 "glm-amalgamated/glm.h" | |
# else | |
# 35238 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_mixed_product extension included") | |
# 35238 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL T mixedProduct( | |
vec<3, T, Q> const& v1, | |
vec<3, T, Q> const& v2, | |
vec<3, T, Q> const& v3); | |
} | |
namespace glm | |
{ | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T mixedProduct | |
( | |
vec<3, T, Q> const& v1, | |
vec<3, T, Q> const& v2, | |
vec<3, T, Q> const& v3 | |
) | |
{ | |
return dot(cross(v1, v2), v3); | |
} | |
} | |
# 35285 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 35287 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 35287 "glm-amalgamated/glm.h" | |
# else | |
# 35289 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_vec_swizzle extension included") | |
# 35289 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm { | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<2, T, Q>(v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> xww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.x, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<2, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<2, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<2, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<2, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> ywx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> ywy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> ywz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> yww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.y, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> zww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.z, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> wwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<3, T, Q> www(const glm::vec<4, T, Q> &v) { | |
return glm::vec<3, T, Q>(v.w, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<1, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xxww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.x, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.y, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.z, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.x, v.w, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.x, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.y, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.z, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.y, v.w, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.x, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.y, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.z, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.z, v.w, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.x, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.y, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.z, v.w, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.x, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.x, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.x, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.x, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.y, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.y, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.y, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.y, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.z, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.z, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.z, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.z, v.w); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.w, v.x); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.w, v.y); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.w, v.z); | |
} | |
template<typename T, qualifier Q> | |
GLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) { | |
return glm::vec<4, T, Q>(v.w, v.w, v.w, v.w); | |
} | |
} | |
# 38066 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 38068 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 38068 "glm-amalgamated/glm.h" | |
# else | |
# 38070 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_extend extension included") | |
# 38070 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_DECL genType extend( | |
genType const& Origin, | |
genType const& Source, | |
typename genType::value_type const Length); | |
} | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType extend | |
( | |
genType const& Origin, | |
genType const& Source, | |
genType const& Distance | |
) | |
{ | |
return Origin + (Source - Origin) * Distance; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<2, T, Q> extend | |
( | |
vec<2, T, Q> const& Origin, | |
vec<2, T, Q> const& Source, | |
T const& Distance | |
) | |
{ | |
return Origin + (Source - Origin) * Distance; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<3, T, Q> extend | |
( | |
vec<3, T, Q> const& Origin, | |
vec<3, T, Q> const& Source, | |
T const& Distance | |
) | |
{ | |
return Origin + (Source - Origin) * Distance; | |
} | |
template<typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<4, T, Q> extend | |
( | |
vec<4, T, Q> const& Origin, | |
vec<4, T, Q> const& Source, | |
T const& Distance | |
) | |
{ | |
return Origin + (Source - Origin) * Distance; | |
} | |
} | |
# 38168 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# 38169 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTC_integer extension included") | |
# 38169 "glm-amalgamated/glm.h" | |
#endif | |
namespace glm | |
{ | |
template<typename genIUType> | |
GLM_FUNC_DECL genIUType log2(genIUType x); | |
# 38191 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, int, Q> iround(vec<L, T, Q> const& x); | |
# 38203 "glm-amalgamated/glm.h" | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, uint, Q> uround(vec<L, T, Q> const& x); | |
} | |
namespace glm{ | |
namespace detail | |
{ | |
template<length_t L, typename T, qualifier Q, bool Aligned> | |
struct compute_log2<L, T, Q, false, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v) | |
{ | |
return vec<L, T, Q>(detail::compute_findMSB_vec<L, T, Q, sizeof(T) * 8>::call(v)); | |
} | |
}; | |
# if GLM_HAS_BITSCAN_WINDOWS | |
template<qualifier Q, bool Aligned> | |
struct compute_log2<4, int, Q, false, Aligned> | |
{ | |
GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v) | |
{ | |
vec<4, int, Q> Result; | |
_BitScanReverse(reinterpret_cast<unsigned long*>(&Result.x), v.x); | |
_BitScanReverse(reinterpret_cast<unsigned long*>(&Result.y), v.y); | |
_BitScanReverse(reinterpret_cast<unsigned long*>(&Result.z), v.z); | |
_BitScanReverse(reinterpret_cast<unsigned long*>(&Result.w), v.w); | |
return Result; | |
} | |
}; | |
# endif | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER int iround(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'iround' only accept floating-point inputs"); | |
assert(static_cast<genType>(0.0) <= x); | |
return static_cast<int>(x + static_cast<genType>(0.5)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, int, Q> iround(vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'iround' only accept floating-point inputs"); | |
assert(all(lessThanEqual(vec<L, T, Q>(0), x))); | |
return vec<L, int, Q>(x + static_cast<T>(0.5)); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER uint uround(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'uround' only accept floating-point inputs"); | |
assert(static_cast<genType>(0.0) <= x); | |
return static_cast<uint>(x + static_cast<genType>(0.5)); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, uint, Q> uround(vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'uround' only accept floating-point inputs"); | |
assert(all(lessThanEqual(vec<L, T, Q>(0), x))); | |
return vec<L, uint, Q>(x + static_cast<T>(0.5)); | |
} | |
} | |
# 38294 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 38296 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_component_wise is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 38296 "glm-amalgamated/glm.h" | |
# else | |
# 38298 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_component_wise extension included") | |
# 38298 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
template<typename floatType, length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, floatType, Q> compNormalize(vec<L, T, Q> const& v); | |
template<length_t L, typename T, typename floatType, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> compScale(vec<L, floatType, Q> const& v); | |
template<typename genType> | |
GLM_FUNC_DECL typename genType::value_type compAdd(genType const& v); | |
template<typename genType> | |
GLM_FUNC_DECL typename genType::value_type compMul(genType const& v); | |
template<typename genType> | |
GLM_FUNC_DECL typename genType::value_type compMin(genType const& v); | |
template<typename genType> | |
GLM_FUNC_DECL typename genType::value_type compMax(genType const& v); | |
} | |
namespace glm{ | |
namespace detail | |
{ | |
template<length_t L, typename T, typename floatType, qualifier Q, bool isInteger, bool signedType> | |
struct compute_compNormalize | |
{}; | |
template<length_t L, typename T, typename floatType, qualifier Q> | |
struct compute_compNormalize<L, T, floatType, Q, true, true> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, floatType, Q> call(vec<L, T, Q> const& v) | |
{ | |
floatType const Min = static_cast<floatType>(std::numeric_limits<T>::min()); | |
floatType const Max = static_cast<floatType>(std::numeric_limits<T>::max()); | |
return (vec<L, floatType, Q>(v) - Min) / (Max - Min) * static_cast<floatType>(2) - static_cast<floatType>(1); | |
} | |
}; | |
template<length_t L, typename T, typename floatType, qualifier Q> | |
struct compute_compNormalize<L, T, floatType, Q, true, false> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, floatType, Q> call(vec<L, T, Q> const& v) | |
{ | |
return vec<L, floatType, Q>(v) / static_cast<floatType>(std::numeric_limits<T>::max()); | |
} | |
}; | |
template<length_t L, typename T, typename floatType, qualifier Q> | |
struct compute_compNormalize<L, T, floatType, Q, false, true> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, floatType, Q> call(vec<L, T, Q> const& v) | |
{ | |
return v; | |
} | |
}; | |
template<length_t L, typename T, typename floatType, qualifier Q, bool isInteger, bool signedType> | |
struct compute_compScale | |
{}; | |
template<length_t L, typename T, typename floatType, qualifier Q> | |
struct compute_compScale<L, T, floatType, Q, true, true> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, floatType, Q> const& v) | |
{ | |
floatType const Max = static_cast<floatType>(std::numeric_limits<T>::max()) + static_cast<floatType>(0.5); | |
vec<L, floatType, Q> const Scaled(v * Max); | |
vec<L, T, Q> const Result(Scaled - static_cast<floatType>(0.5)); | |
return Result; | |
} | |
}; | |
template<length_t L, typename T, typename floatType, qualifier Q> | |
struct compute_compScale<L, T, floatType, Q, true, false> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, floatType, Q> const& v) | |
{ | |
return vec<L, T, Q>(vec<L, floatType, Q>(v) * static_cast<floatType>(std::numeric_limits<T>::max())); | |
} | |
}; | |
template<length_t L, typename T, typename floatType, qualifier Q> | |
struct compute_compScale<L, T, floatType, Q, false, true> | |
{ | |
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, floatType, Q> const& v) | |
{ | |
return v; | |
} | |
}; | |
} | |
template<typename floatType, length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, floatType, Q> compNormalize(vec<L, T, Q> const& v) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, "'compNormalize' accepts only floating-point types for 'floatType' template parameter"); | |
return detail::compute_compNormalize<L, T, floatType, Q, std::numeric_limits<T>::is_integer, std::numeric_limits<T>::is_signed>::call(v); | |
} | |
template<typename T, length_t L, typename floatType, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> compScale(vec<L, floatType, Q> const& v) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, "'compScale' accepts only floating-point types for 'floatType' template parameter"); | |
return detail::compute_compScale<L, T, floatType, Q, std::numeric_limits<T>::is_integer, std::numeric_limits<T>::is_signed>::call(v); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T compAdd(vec<L, T, Q> const& v) | |
{ | |
T Result(0); | |
for(length_t i = 0, n = v.length(); i < n; ++i) | |
Result += v[i]; | |
return Result; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T compMul(vec<L, T, Q> const& v) | |
{ | |
T Result(1); | |
for(length_t i = 0, n = v.length(); i < n; ++i) | |
Result *= v[i]; | |
return Result; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T compMin(vec<L, T, Q> const& v) | |
{ | |
T Result(v[0]); | |
for(length_t i = 1, n = v.length(); i < n; ++i) | |
Result = min(Result, v[i]); | |
return Result; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T compMax(vec<L, T, Q> const& v) | |
{ | |
T Result(v[0]); | |
for(length_t i = 1, n = v.length(); i < n; ++i) | |
Result = max(Result, v[i]); | |
return Result; | |
} | |
} | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 38471 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_texture is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 38471 "glm-amalgamated/glm.h" | |
# else | |
# 38473 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_texture extension included") | |
# 38473 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
# 38488 "glm-amalgamated/glm.h" | |
template <length_t L, typename T, qualifier Q> | |
T levels(vec<L, T, Q> const& Extent); | |
} | |
# 38512 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 38514 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_number_precision is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 38514 "glm-amalgamated/glm.h" | |
# else | |
# 38516 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_number_precision extension included") | |
# 38516 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm{ | |
namespace gtx | |
{ | |
typedef u8 u8vec1; | |
typedef u16 u16vec1; | |
typedef u32 u32vec1; | |
typedef u64 u64vec1; | |
typedef f32 f32vec1; | |
typedef f64 f64vec1; | |
typedef f32 f32mat1; | |
typedef f32 f32mat1x1; | |
typedef f64 f64mat1; | |
typedef f64 f64mat1x1; | |
} | |
} | |
namespace glm | |
{ | |
} | |
# 38573 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 38575 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 38575 "glm-amalgamated/glm.h" | |
# else | |
# 38577 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_extend extension included") | |
# 38577 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
} | |
namespace glm | |
{ | |
template<typename T> | |
GLM_FUNC_QUALIFIER bool lessThan | |
( | |
T const& x, | |
T const& y | |
) | |
{ | |
return x < y; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER bool lessThanEqual | |
( | |
T const& x, | |
T const& y | |
) | |
{ | |
return x <= y; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER bool greaterThan | |
( | |
T const& x, | |
T const& y | |
) | |
{ | |
return x > y; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER bool greaterThanEqual | |
( | |
T const& x, | |
T const& y | |
) | |
{ | |
return x >= y; | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER bool equal | |
( | |
T const& x, | |
T const& y | |
) | |
{ | |
return detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(x, y); | |
} | |
template<typename T> | |
GLM_FUNC_QUALIFIER bool notEqual | |
( | |
T const& x, | |
T const& y | |
) | |
{ | |
return !detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(x, y); | |
} | |
GLM_FUNC_QUALIFIER bool any | |
( | |
bool const& x | |
) | |
{ | |
return x; | |
} | |
GLM_FUNC_QUALIFIER bool all | |
( | |
bool const& x | |
) | |
{ | |
return x; | |
} | |
GLM_FUNC_QUALIFIER bool not_ | |
( | |
bool const& x | |
) | |
{ | |
return !x; | |
} | |
} | |
# 38695 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 38697 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_fast_square_root is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 38697 "glm-amalgamated/glm.h" | |
# else | |
# 38699 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_fast_square_root extension included") | |
# 38699 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_DECL genType fastSqrt(genType x); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> fastSqrt(vec<L, T, Q> const& x); | |
template<typename genType> | |
GLM_FUNC_DECL genType fastInverseSqrt(genType x); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL vec<L, T, Q> fastInverseSqrt(vec<L, T, Q> const& x); | |
template<typename genType> | |
GLM_FUNC_DECL genType fastLength(genType x); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL T fastLength(vec<L, T, Q> const& x); | |
template<typename genType> | |
GLM_FUNC_DECL genType fastDistance(genType x, genType y); | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_DECL T fastDistance(vec<L, T, Q> const& x, vec<L, T, Q> const& y); | |
template<typename genType> | |
GLM_FUNC_DECL genType fastNormalize(genType const& x); | |
} | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType fastSqrt(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'fastSqrt' only accept floating-point input"); | |
return genType(1) / fastInverseSqrt(x); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fastSqrt(vec<L, T, Q> const& x) | |
{ | |
return detail::functor1<vec, L, T, T, Q>::call(fastSqrt, x); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType fastInverseSqrt(genType x) | |
{ | |
return detail::compute_inversesqrt<1, genType, lowp, detail::is_aligned<lowp>::value>::call(vec<1, genType, lowp>(x)).x; | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fastInverseSqrt(vec<L, T, Q> const& x) | |
{ | |
return detail::compute_inversesqrt<L, T, Q, detail::is_aligned<Q>::value>::call(x); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType fastLength(genType x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'fastLength' only accept floating-point inputs"); | |
return abs(x); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T fastLength(vec<L, T, Q> const& x) | |
{ | |
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fastLength' only accept floating-point inputs"); | |
return fastSqrt(dot(x, x)); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType fastDistance(genType x, genType y) | |
{ | |
return fastLength(y - x); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER T fastDistance(vec<L, T, Q> const& x, vec<L, T, Q> const& y) | |
{ | |
return fastLength(y - x); | |
} | |
template<typename genType> | |
GLM_FUNC_QUALIFIER genType fastNormalize(genType x) | |
{ | |
return x > genType(0) ? genType(1) : -genType(1); | |
} | |
template<length_t L, typename T, qualifier Q> | |
GLM_FUNC_QUALIFIER vec<L, T, Q> fastNormalize(vec<L, T, Q> const& x) | |
{ | |
return x * fastInverseSqrt(dot(x, x)); | |
} | |
} | |
# 38858 "glm-amalgamated/glm.h" | |
#include <string> | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 38862 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_string_cast is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 38862 "glm-amalgamated/glm.h" | |
# else | |
# 38864 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_string_cast extension included") | |
# 38864 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
#if(GLM_COMPILER & GLM_COMPILER_CUDA) | |
# error "GLM_GTX_string_cast is not supported on CUDA compiler" | |
#endif | |
namespace glm | |
{ | |
template<typename genType> | |
GLM_FUNC_DECL std::string to_string(genType const& x); | |
} | |
# 38901 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 38903 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_exterior_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 38903 "glm-amalgamated/glm.h" | |
# else | |
# 38905 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_exterior_product extension included") | |
# 38905 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
# 38920 "glm-amalgamated/glm.h" | |
template<typename T, qualifier Q> | |
GLM_FUNC_DECL T cross(vec<2, T, Q> const& v, vec<2, T, Q> const& u); | |
} | |
# 38942 "glm-amalgamated/glm.h" | |
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) | |
# ifndef GLM_ENABLE_EXPERIMENTAL | |
# 38944 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_associated_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") | |
# 38944 "glm-amalgamated/glm.h" | |
# else | |
# 38946 "glm-amalgamated/glm.h" | |
#pragma message("GLM: GLM_GTX_associated_min_max extension included") | |
# 38946 "glm-amalgamated/glm.h" | |
# endif | |
#endif | |
namespace glm | |
{ | |
template<typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL U associatedMin(T x, U a, T y, U b); | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<2, U, Q> associatedMin( | |
vec<L, T, Q> const& x, vec<L, U, Q> const& a, | |
vec<L, T, Q> const& y, vec<L, U, Q> const& b); | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<L, U, Q> associatedMin( | |
T x, const vec<L, U, Q>& a, | |
T y, const vec<L, U, Q>& b); | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<L, U, Q> associatedMin( | |
vec<L, T, Q> const& x, U a, | |
vec<L, T, Q> const& y, U b); | |
template<typename T, typename U> | |
GLM_FUNC_DECL U associatedMin( | |
T x, U a, | |
T y, U b, | |
T z, U c); | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<L, U, Q> associatedMin( | |
vec<L, T, Q> const& x, vec<L, U, Q> const& a, | |
vec<L, T, Q> const& y, vec<L, U, Q> const& b, | |
vec<L, T, Q> const& z, vec<L, U, Q> const& c); | |
template<typename T, typename U> | |
GLM_FUNC_DECL U associatedMin( | |
T x, U a, | |
T y, U b, | |
T z, U c, | |
T w, U d); | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<L, U, Q> associatedMin( | |
vec<L, T, Q> const& x, vec<L, U, Q> const& a, | |
vec<L, T, Q> const& y, vec<L, U, Q> const& b, | |
vec<L, T, Q> const& z, vec<L, U, Q> const& c, | |
vec<L, T, Q> const& w, vec<L, U, Q> const& d); | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<L, U, Q> associatedMin( | |
T x, vec<L, U, Q> const& a, | |
T y, vec<L, U, Q> const& b, | |
T z, vec<L, U, Q> const& c, | |
T w, vec<L, U, Q> const& d); | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<L, U, Q> associatedMin( | |
vec<L, T, Q> const& x, U a, | |
vec<L, T, Q> const& y, U b, | |
vec<L, T, Q> const& z, U c, | |
vec<L, T, Q> const& w, U d); | |
template<typename T, typename U> | |
GLM_FUNC_DECL U associatedMax(T x, U a, T y, U b); | |
template<length_t L, typename T, typename U, qualifier Q> | |
GLM_FUNC_DECL vec<2, U, Q> associatedMax( | |
vec<L, T, Q> const& x, vec<L, U, Q> const& a, | |
vec<L, T, Q> const& y, vec<L, U, |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment