diff --git a/.gitmodules b/.gitmodules
index 68fda0efa..e96caf6d9 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -9,3 +9,6 @@
[submodule "deps/happly"]
path = deps/happly
url = https://github.com/nmwsharp/happly.git
+[submodule "deps/glm"]
+ path = deps/glm
+ url = https://github.com/g-truc/glm.git
diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt
index 3b61d1eef..8229e52c4 100644
--- a/deps/CMakeLists.txt
+++ b/deps/CMakeLists.txt
@@ -1,23 +1,41 @@
if("${POLYSCOPE_BACKEND_OPENGL3_GLFW}")
## Glad
- add_subdirectory(glad)
+ if(NOT TARGET glad)
+ add_subdirectory(glad)
+ endif()
## GLFW
- set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
- set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
- set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
- set(GLFW_INSTALL OFF CACHE BOOL "" FORCE)
- add_subdirectory(glfw)
+ if(NOT TARGET glfw)
+ set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
+ set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
+ set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
+ set(GLFW_INSTALL OFF CACHE BOOL "" FORCE)
+ add_subdirectory(glfw)
+ endif()
endif()
-if("${POLYSCOPE_BACKEND_OPENGL_MOCK}")
+## glm
+if(NOT TARGET glm::glm)
+ add_subdirectory(glm)
endif()
## Imgui
-add_subdirectory(imgui)
+if(NOT TARGET imgui)
+ add_subdirectory(imgui)
+endif()
-## Argparse
+## Json
+if(NOT TARGET nlohmann_json::nlohmann_json)
+ add_subdirectory(json)
+endif()
-## Other dependencies
-add_subdirectory(stb)
+## MarchingCube
+if(NOT TARGET MarchingCube::MarchingCube)
+ add_subdirectory(MarchingCubeCpp)
+endif()
+
+## stb
+if(NOT TARGET stb)
+ add_subdirectory(stb)
+endif()
diff --git a/deps/MarchingCubeCpp/CMakeLists.txt b/deps/MarchingCubeCpp/CMakeLists.txt
new file mode 100644
index 000000000..b2610f5bc
--- /dev/null
+++ b/deps/MarchingCubeCpp/CMakeLists.txt
@@ -0,0 +1,4 @@
+add_library(MarchingCube INTERFACE)
+add_library(MarchingCube::MarchingCube ALIAS MarchingCube)
+
+target_include_directories(MarchingCube INTERFACE include)
diff --git a/deps/glad/src/CMakeLists.txt b/deps/glad/src/CMakeLists.txt
index 797bf274f..a7a08b3e5 100644
--- a/deps/glad/src/CMakeLists.txt
+++ b/deps/glad/src/CMakeLists.txt
@@ -13,6 +13,6 @@ if (library_type STREQUAL SHARED_LIBRARY)
target_compile_definitions(glad PUBLIC GLAD_GLAPI_EXPORT PRIVATE GLAD_GLAPI_EXPORT_BUILD)
endif()
-target_include_directories(glad PRIVATE "../include")
+target_include_directories(glad PUBLIC "../include")
set_target_properties(glad PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
diff --git a/deps/glm b/deps/glm
new file mode 160000
index 000000000..bf71a8349
--- /dev/null
+++ b/deps/glm
@@ -0,0 +1 @@
+Subproject commit bf71a834948186f4097caa076cd2663c69a10e1e
diff --git a/deps/glm/CMakeLists.txt b/deps/glm/CMakeLists.txt
deleted file mode 100644
index b8c328a04..000000000
--- a/deps/glm/CMakeLists.txt
+++ /dev/null
@@ -1,239 +0,0 @@
-cmake_minimum_required(VERSION 3.2 FATAL_ERROR)
-cmake_policy(VERSION 3.2)
-
-set(GLM_VERSION "0.9.9")
-project(glm VERSION ${GLM_VERSION} LANGUAGES CXX)
-
-enable_testing()
-
-option(GLM_QUIET "No CMake Message" OFF)
-option(BUILD_SHARED_LIBS "Build shared library" ON)
-option(BUILD_STATIC_LIBS "Build static library" ON)
-option(GLM_TEST_ENABLE_CXX_98 "Enable C++ 98" OFF)
-option(GLM_TEST_ENABLE_CXX_11 "Enable C++ 11" OFF)
-option(GLM_TEST_ENABLE_CXX_14 "Enable C++ 14" OFF)
-option(GLM_TEST_ENABLE_CXX_17 "Enable C++ 17" OFF)
-option(GLM_TEST_ENABLE_CXX_20 "Enable C++ 20" OFF)
-
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-
-if(GLM_TEST_ENABLE_CXX_20)
- set(CMAKE_CXX_STANDARD 20)
- add_definitions(-DGLM_FORCE_CXX2A)
- if(NOT GLM_QUIET)
- message(STATUS "GLM: Build with C++20 features")
- endif()
-
-elseif(GLM_TEST_ENABLE_CXX_17)
- set(CMAKE_CXX_STANDARD 17)
- add_definitions(-DGLM_FORCE_CXX17)
- if(NOT GLM_QUIET)
- message(STATUS "GLM: Build with C++17 features")
- endif()
-
-elseif(GLM_TEST_ENABLE_CXX_14)
- set(CMAKE_CXX_STANDARD 14)
- add_definitions(-DGLM_FORCE_CXX14)
- if(NOT GLM_QUIET)
- message(STATUS "GLM: Build with C++14 features")
- endif()
-
-elseif(GLM_TEST_ENABLE_CXX_11)
- set(CMAKE_CXX_STANDARD 11)
- add_definitions(-DGLM_FORCE_CXX11)
- if(NOT GLM_QUIET)
- message(STATUS "GLM: Build with C++11 features")
- endif()
-
-elseif(GLM_TEST_ENABLE_CXX_98)
- set(CMAKE_CXX_STANDARD 98)
- add_definitions(-DGLM_FORCE_CXX98)
- if(NOT GLM_QUIET)
- message(STATUS "GLM: Build with C++98 features")
- endif()
-endif()
-
-option(GLM_TEST_ENABLE_LANG_EXTENSIONS "Enable language extensions" OFF)
-
-option(GLM_DISABLE_AUTO_DETECTION "Enable language extensions" OFF)
-
-if(GLM_DISABLE_AUTO_DETECTION)
- add_definitions(-DGLM_FORCE_PLATFORM_UNKNOWN -DGLM_FORCE_COMPILER_UNKNOWN -DGLM_FORCE_ARCH_UNKNOWN -DGLM_FORCE_CXX_UNKNOWN)
-endif()
-
-if(GLM_TEST_ENABLE_LANG_EXTENSIONS)
- set(CMAKE_CXX_EXTENSIONS ON)
- if((CMAKE_CXX_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "GNU"))
- add_compile_options(-fms-extensions)
- endif()
- message(STATUS "GLM: Build with C++ language extensions")
-else()
- set(CMAKE_CXX_EXTENSIONS OFF)
- if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
- add_compile_options(/Za)
- if(MSVC15)
- add_compile_options(/permissive-)
- endif()
- endif()
-endif()
-
-option(GLM_TEST_ENABLE_FAST_MATH "Enable fast math optimizations" OFF)
-if(GLM_TEST_ENABLE_FAST_MATH)
- if(NOT GLM_QUIET)
- message(STATUS "GLM: Build with fast math optimizations")
- endif()
-
- if((CMAKE_CXX_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "GNU"))
- add_compile_options(-ffast-math)
-
- elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
- add_compile_options(/fp:fast)
- endif()
-else()
- if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
- add_compile_options(/fp:precise)
- endif()
-endif()
-
-option(GLM_TEST_ENABLE "Build unit tests" ON)
-option(GLM_TEST_ENABLE_SIMD_SSE2 "Enable SSE2 optimizations" OFF)
-option(GLM_TEST_ENABLE_SIMD_SSE3 "Enable SSE3 optimizations" OFF)
-option(GLM_TEST_ENABLE_SIMD_SSSE3 "Enable SSSE3 optimizations" OFF)
-option(GLM_TEST_ENABLE_SIMD_SSE4_1 "Enable SSE 4.1 optimizations" OFF)
-option(GLM_TEST_ENABLE_SIMD_SSE4_2 "Enable SSE 4.2 optimizations" OFF)
-option(GLM_TEST_ENABLE_SIMD_AVX "Enable AVX optimizations" OFF)
-option(GLM_TEST_ENABLE_SIMD_AVX2 "Enable AVX2 optimizations" OFF)
-option(GLM_TEST_FORCE_PURE "Force 'pure' instructions" OFF)
-
-if(GLM_TEST_FORCE_PURE)
- add_definitions(-DGLM_FORCE_PURE)
-
- if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
- add_compile_options(-mfpmath=387)
- endif()
- message(STATUS "GLM: No SIMD instruction set")
-
-elseif(GLM_TEST_ENABLE_SIMD_AVX2)
- add_definitions(-DGLM_FORCE_PURE)
-
- if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
- add_compile_options(-mavx2)
- elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
- add_compile_options(/QxAVX2)
- elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
- add_compile_options(/arch:AVX2)
- endif()
- message(STATUS "GLM: AVX2 instruction set")
-
-elseif(GLM_TEST_ENABLE_SIMD_AVX)
- add_definitions(-DGLM_FORCE_INTRINSICS)
-
- if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
- add_compile_options(-mavx)
- elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
- add_compile_options(/QxAVX)
- elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
- add_compile_options(/arch:AVX)
- endif()
- message(STATUS "GLM: AVX instruction set")
-
-elseif(GLM_TEST_ENABLE_SIMD_SSE4_2)
- add_definitions(-DGLM_FORCE_INTRINSICS)
-
- if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
- add_compile_options(-msse4.2)
- elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
- add_compile_options(/QxSSE4.2)
- elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
- add_compile_options(/arch:SSE2) # VC doesn't support SSE4.2
- endif()
- message(STATUS "GLM: SSE4.2 instruction set")
-
-elseif(GLM_TEST_ENABLE_SIMD_SSE4_1)
- add_definitions(-DGLM_FORCE_INTRINSICS)
-
- if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
- add_compile_options(-msse4.1)
- elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
- add_compile_options(/QxSSE4.1)
- elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
- add_compile_options(/arch:SSE2) # VC doesn't support SSE4.1
- endif()
- message(STATUS "GLM: SSE4.1 instruction set")
-
-elseif(GLM_TEST_ENABLE_SIMD_SSSE3)
- add_definitions(-DGLM_FORCE_INTRINSICS)
-
- if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
- add_compile_options(-mssse3)
- elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
- add_compile_options(/QxSSSE3)
- elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
- add_compile_options(/arch:SSE2) # VC doesn't support SSSE3
- endif()
- message(STATUS "GLM: SSSE3 instruction set")
-
-elseif(GLM_TEST_ENABLE_SIMD_SSE3)
- add_definitions(-DGLM_FORCE_INTRINSICS)
-
- if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
- add_compile_options(-msse3)
- elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
- add_compile_options(/QxSSE3)
- elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
- add_compile_options(/arch:SSE2) # VC doesn't support SSE3
- endif()
- message(STATUS "GLM: SSE3 instruction set")
-
-elseif(GLM_TEST_ENABLE_SIMD_SSE2)
- add_definitions(-DGLM_FORCE_INTRINSICS)
-
- if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
- add_compile_options(-msse2)
- elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
- add_compile_options(/QxSSE2)
- elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
- add_compile_options(/arch:SSE2)
- endif()
- message(STATUS "GLM: SSE2 instruction set")
-endif()
-
-# Compiler and default options
-
-if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- if(NOT GLM_QUIET)
- message("GLM: Clang - ${CMAKE_CXX_COMPILER_ID} compiler")
- endif()
-
- add_compile_options(-Werror -Weverything)
- add_compile_options(-Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++11-long-long -Wno-padded -Wno-gnu-anonymous-struct -Wno-nested-anon-types)
- add_compile_options(-Wno-undefined-reinterpret-cast -Wno-sign-conversion -Wno-unused-variable -Wno-missing-prototypes -Wno-unreachable-code -Wno-missing-variable-declarations -Wno-sign-compare -Wno-global-constructors -Wno-unused-macros -Wno-format-nonliteral)
-
-elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
- if(NOT GLM_QUIET)
- message("GLM: GCC - ${CMAKE_CXX_COMPILER_ID} compiler")
- endif()
-
- add_compile_options(-O2)
- add_compile_options(-Wno-long-long)
-
-elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
- if(NOT GLM_QUIET)
- message("GLM: Intel - ${CMAKE_CXX_COMPILER_ID} compiler")
- endif()
-
-elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
- if(NOT GLM_QUIET)
- message("GLM: Visual C++ - ${CMAKE_CXX_COMPILER_ID} compiler")
- endif()
-
- add_compile_options(/W4 /WX)
- add_compile_options(/wd4309 /wd4324 /wd4389 /wd4127 /wd4267 /wd4146 /wd4201 /wd4464 /wd4514 /wd4701 /wd4820 /wd4365)
- add_definitions(-D_CRT_SECURE_NO_WARNINGS)
-endif()
-
-include_directories("${PROJECT_SOURCE_DIR}")
-
-add_subdirectory(glm)
-add_subdirectory(test)
-
diff --git a/deps/glm/copying.txt b/deps/glm/copying.txt
deleted file mode 100644
index 0b3b5acf7..000000000
--- a/deps/glm/copying.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-================================================================================
-OpenGL Mathematics (GLM)
---------------------------------------------------------------------------------
-GLM is licensed under The Happy Bunny License and MIT License
-
-================================================================================
-The Happy Bunny License (Modified MIT License)
---------------------------------------------------------------------------------
-Copyright (c) 2005 - 2014 G-Truc Creation
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-Restrictions:
- By making use of the Software for military purposes, you choose to make a
- Bunny unhappy.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-================================================================================
-The MIT License
---------------------------------------------------------------------------------
-Copyright (c) 2005 - 2014 G-Truc Creation
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/deps/glm/glm/CMakeLists.txt b/deps/glm/glm/CMakeLists.txt
deleted file mode 100644
index 032340d47..000000000
--- a/deps/glm/glm/CMakeLists.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-file(GLOB ROOT_SOURCE *.cpp)
-file(GLOB ROOT_INLINE *.inl)
-file(GLOB ROOT_HEADER *.hpp)
-file(GLOB ROOT_TEXT ../*.txt)
-file(GLOB ROOT_MD ../*.md)
-file(GLOB ROOT_NAT ../util/glm.natvis)
-
-file(GLOB_RECURSE CORE_SOURCE ./detail/*.cpp)
-file(GLOB_RECURSE CORE_INLINE ./detail/*.inl)
-file(GLOB_RECURSE CORE_HEADER ./detail/*.hpp)
-
-file(GLOB_RECURSE EXT_SOURCE ./ext/*.cpp)
-file(GLOB_RECURSE EXT_INLINE ./ext/*.inl)
-file(GLOB_RECURSE EXT_HEADER ./ext/*.hpp)
-
-file(GLOB_RECURSE GTC_SOURCE ./gtc/*.cpp)
-file(GLOB_RECURSE GTC_INLINE ./gtc/*.inl)
-file(GLOB_RECURSE GTC_HEADER ./gtc/*.hpp)
-
-file(GLOB_RECURSE GTX_SOURCE ./gtx/*.cpp)
-file(GLOB_RECURSE GTX_INLINE ./gtx/*.inl)
-file(GLOB_RECURSE GTX_HEADER ./gtx/*.hpp)
-
-file(GLOB_RECURSE SIMD_SOURCE ./simd/*.cpp)
-file(GLOB_RECURSE SIMD_INLINE ./simd/*.inl)
-file(GLOB_RECURSE SIMD_HEADER ./simd/*.h)
-
-source_group("Text Files" FILES ${ROOT_TEXT} ${ROOT_MD})
-source_group("Core Files" FILES ${CORE_SOURCE})
-source_group("Core Files" FILES ${CORE_INLINE})
-source_group("Core Files" FILES ${CORE_HEADER})
-source_group("EXT Files" FILES ${EXT_SOURCE})
-source_group("EXT Files" FILES ${EXT_INLINE})
-source_group("EXT Files" FILES ${EXT_HEADER})
-source_group("GTC Files" FILES ${GTC_SOURCE})
-source_group("GTC Files" FILES ${GTC_INLINE})
-source_group("GTC Files" FILES ${GTC_HEADER})
-source_group("GTX Files" FILES ${GTX_SOURCE})
-source_group("GTX Files" FILES ${GTX_INLINE})
-source_group("GTX Files" FILES ${GTX_HEADER})
-source_group("SIMD Files" FILES ${SIMD_SOURCE})
-source_group("SIMD Files" FILES ${SIMD_INLINE})
-source_group("SIMD Files" FILES ${SIMD_HEADER})
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
-
-if(BUILD_STATIC_LIBS)
-add_library(glm_static STATIC ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}
- ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER}
- ${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER}
- ${EXT_SOURCE} ${EXT_INLINE} ${EXT_HEADER}
- ${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER}
- ${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER}
- ${SIMD_SOURCE} ${SIMD_INLINE} ${SIMD_HEADER})
-endif()
-
-if(BUILD_SHARED_LIBS)
-add_library(glm_shared SHARED ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}
- ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER}
- ${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER}
- ${EXT_SOURCE} ${EXT_INLINE} ${EXT_HEADER}
- ${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER}
- ${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER}
- ${SIMD_SOURCE} ${SIMD_INLINE} ${SIMD_HEADER})
-endif()
-
diff --git a/deps/glm/glm/common.hpp b/deps/glm/glm/common.hpp
deleted file mode 100644
index 0328dc91e..000000000
--- a/deps/glm/glm/common.hpp
+++ /dev/null
@@ -1,539 +0,0 @@
-/// @ref core
-/// @file glm/common.hpp
-///
-/// @see GLSL 4.20.8 specification, section 8.3 Common Functions
-///
-/// @defgroup core_func_common Common functions
-/// @ingroup core
-///
-/// Provides GLSL common functions
-///
-/// These all operate component-wise. The description is per component.
-///
-/// Include to use these core features.
-
-#pragma once
-
-#include "detail/qualifier.hpp"
-#include "detail/_fixes.hpp"
-
-namespace glm
-{
- /// @addtogroup core_func_common
- /// @{
-
- /// Returns x if x >= 0; otherwise, it returns -x.
- ///
- /// @tparam genType floating-point or signed integer; scalar or vector types.
- ///
- /// @see GLSL abs man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x);
-
- /// Returns x if x >= 0; otherwise, it returns -x.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point or signed integer scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL abs man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL GLM_CONSTEXPR vec abs(vec const& x);
-
- /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL sign man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec sign(vec const& x);
-
- /// Returns a value equal to the nearest integer that is less then or equal to x.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL floor man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec floor(vec const& x);
-
- /// Returns a value equal to the nearest integer to x
- /// whose absolute value is not larger than the absolute value of x.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL trunc man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec trunc(vec const& x);
-
- /// Returns a value equal to the nearest integer to x.
- /// The fraction 0.5 will round in a direction chosen by the
- /// implementation, presumably the direction that is fastest.
- /// This includes the possibility that round(x) returns the
- /// same value as roundEven(x) for all values of x.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL round man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec round(vec const& x);
-
- /// Returns a value equal to the nearest integer to x.
- /// A fractional part of 0.5 will round toward the nearest even
- /// integer. (Both 3.5 and 4.5 for x will return 4.0.)
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL roundEven man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- /// @see New round to even technique
- template
- GLM_FUNC_DECL vec roundEven(vec const& x);
-
- /// Returns a value equal to the nearest integer
- /// that is greater than or equal to x.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL ceil man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec ceil(vec const& x);
-
- /// Return x - floor(x).
- ///
- /// @tparam genType Floating-point scalar or vector types.
- ///
- /// @see GLSL fract man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL genType fract(genType x);
-
- /// Return x - floor(x).
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL fract man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec fract(vec const& x);
-
- template
- GLM_FUNC_DECL genType mod(genType x, genType y);
-
- template
- GLM_FUNC_DECL vec mod(vec const& x, T y);
-
- /// Modulus. Returns x - y * floor(x / y)
- /// for each component in x using the floating point value y.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point scalar types, include glm/gtc/integer for integer scalar types support
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL mod man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec mod(vec const& x, vec const& y);
-
- /// Returns the fractional part of x and sets i to the integer
- /// part (as a whole number floating point value). Both the
- /// return value and the output parameter will have the same
- /// sign as x.
- ///
- /// @tparam genType Floating-point scalar or vector types.
- ///
- /// @see GLSL modf man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL genType modf(genType x, genType& i);
-
- /// Returns y if y < x; otherwise, it returns x.
- ///
- /// @tparam genType Floating-point or integer; scalar or vector types.
- ///
- /// @see GLSL min man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y);
-
- /// Returns y if y < x; otherwise, it returns x.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point or integer scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL min man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& x, T y);
-
- /// Returns y if y < x; otherwise, it returns x.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point or integer scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL min man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& x, vec const& y);
-
- /// Returns y if x < y; otherwise, it returns x.
- ///
- /// @tparam genType Floating-point or integer; scalar or vector types.
- ///
- /// @see GLSL max man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y);
-
- /// Returns y if x < y; otherwise, it returns x.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point or integer scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL max man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, T y);
-
- /// Returns y if x < y; otherwise, it returns x.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point or integer scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL max man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, vec const& y);
-
- /// Returns min(max(x, minVal), maxVal) for each component in x
- /// using the floating-point values minVal and maxVal.
- ///
- /// @tparam genType Floating-point or integer; scalar or vector types.
- ///
- /// @see GLSL clamp man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal);
-
- /// Returns min(max(x, minVal), maxVal) for each component in x
- /// using the floating-point values minVal and maxVal.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point or integer scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL clamp man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL GLM_CONSTEXPR vec clamp(vec const& x, T minVal, T maxVal);
-
- /// Returns min(max(x, minVal), maxVal) for each component in x
- /// using the floating-point values minVal and maxVal.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point or integer scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL clamp man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL GLM_CONSTEXPR vec clamp(vec const& x, vec const& minVal, vec const& maxVal);
-
- /// If genTypeU is a floating scalar or vector:
- /// Returns x * (1.0 - a) + y * a, i.e., the linear blend of
- /// x and y using the floating-point value a.
- /// The value for a is not restricted to the range [0, 1].
- ///
- /// If genTypeU is a boolean scalar or vector:
- /// Selects which vector each returned component comes
- /// from. For a component of 'a' that is false, the
- /// corresponding component of 'x' is returned. For a
- /// component of 'a' that is true, the corresponding
- /// component of 'y' is returned. Components of 'x' and 'y' that
- /// are not selected are allowed to be invalid floating point
- /// values and will have no effect on the results. Thus, this
- /// provides different functionality than
- /// genType mix(genType x, genType y, genType(a))
- /// where a is a Boolean vector.
- ///
- /// @see GLSL mix man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- ///
- /// @param[in] x Value to interpolate.
- /// @param[in] y Value to interpolate.
- /// @param[in] a Interpolant.
- ///
- /// @tparam genTypeT Floating point scalar or vector.
- /// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.
- ///
- /// @code
- /// #include
- /// ...
- /// float a;
- /// bool b;
- /// glm::dvec3 e;
- /// glm::dvec3 f;
- /// glm::vec4 g;
- /// glm::vec4 h;
- /// ...
- /// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors.
- /// glm::vec4 s = glm::mix(g, h, b); // Returns g or h;
- /// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second.
- /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter.
- /// @endcode
- template
- GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a);
-
- template
- GLM_FUNC_DECL vec mix(vec const& x, vec const& y, vec const& a);
-
- template
- GLM_FUNC_DECL vec mix(vec const& x, vec const& y, U a);
-
- /// Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType.
- ///
- /// @see GLSL step man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL genType step(genType edge, genType x);
-
- /// Returns 0.0 if x < edge, otherwise it returns 1.0.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL step man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec step(T edge, vec const& x);
-
- /// Returns 0.0 if x < edge, otherwise it returns 1.0.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL step man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec step(vec const& edge, vec const& x);
-
- /// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and
- /// performs smooth Hermite interpolation between 0 and 1
- /// when edge0 < x < edge1. This is useful in cases where
- /// you would want a threshold function with a smooth
- /// transition. This is equivalent to:
- /// genType t;
- /// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1);
- /// return t * t * (3 - 2 * t);
- /// Results are undefined if edge0 >= edge1.
- ///
- /// @tparam genType Floating-point scalar or vector types.
- ///
- /// @see GLSL smoothstep man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x);
-
- template
- GLM_FUNC_DECL vec smoothstep(T edge0, T edge1, vec const& x);
-
- template
- GLM_FUNC_DECL vec smoothstep(vec const& edge0, vec const& edge1, vec const& x);
-
- /// Returns true if x holds a NaN (not a number)
- /// representation in the underlying implementation's set of
- /// floating point representations. Returns false otherwise,
- /// including for implementations with no NaN
- /// representations.
- ///
- /// /!\ When using compiler fast math, this function may fail.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL isnan man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec isnan(vec const& x);
-
- /// Returns true if x holds a positive infinity or negative
- /// infinity representation in the underlying implementation's
- /// set of floating point representations. Returns false
- /// otherwise, including for implementations with no infinity
- /// representations.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam T Floating-point scalar types
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL isinf man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec isinf(vec const& x);
-
- /// Returns a signed integer value representing
- /// the encoding of a floating-point value. The floating-point
- /// value's bit-level representation is preserved.
- ///
- /// @see GLSL floatBitsToInt man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- GLM_FUNC_DECL int floatBitsToInt(float const& v);
-
- /// Returns a signed integer value representing
- /// the encoding of a floating-point value. The floatingpoint
- /// value's bit-level representation is preserved.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL floatBitsToInt man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec floatBitsToInt(vec const& v);
-
- /// Returns a unsigned integer value representing
- /// the encoding of a floating-point value. The floatingpoint
- /// value's bit-level representation is preserved.
- ///
- /// @see GLSL floatBitsToUint man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- GLM_FUNC_DECL uint floatBitsToUint(float const& v);
-
- /// Returns a unsigned integer value representing
- /// the encoding of a floating-point value. The floatingpoint
- /// value's bit-level representation is preserved.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL floatBitsToUint man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec floatBitsToUint(vec const& v);
-
- /// Returns a floating-point value corresponding to a signed
- /// integer encoding of a floating-point value.
- /// If an inf or NaN is passed in, it will not signal, and the
- /// resulting floating point value is unspecified. Otherwise,
- /// the bit-level representation is preserved.
- ///
- /// @see GLSL intBitsToFloat man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- GLM_FUNC_DECL float intBitsToFloat(int const& v);
-
- /// Returns a floating-point value corresponding to a signed
- /// integer encoding of a floating-point value.
- /// If an inf or NaN is passed in, it will not signal, and the
- /// resulting floating point value is unspecified. Otherwise,
- /// the bit-level representation is preserved.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL intBitsToFloat man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec intBitsToFloat(vec const& v);
-
- /// Returns a floating-point value corresponding to a
- /// unsigned integer encoding of a floating-point value.
- /// If an inf or NaN is passed in, it will not signal, and the
- /// resulting floating point value is unspecified. Otherwise,
- /// the bit-level representation is preserved.
- ///
- /// @see GLSL uintBitsToFloat man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- GLM_FUNC_DECL float uintBitsToFloat(uint const& v);
-
- /// Returns a floating-point value corresponding to a
- /// unsigned integer encoding of a floating-point value.
- /// If an inf or NaN is passed in, it will not signal, and the
- /// resulting floating point value is unspecified. Otherwise,
- /// the bit-level representation is preserved.
- ///
- /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
- /// @tparam Q Value from qualifier enum
- ///
- /// @see GLSL uintBitsToFloat man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL vec uintBitsToFloat(vec const& v);
-
- /// Computes and returns a * b + c.
- ///
- /// @tparam genType Floating-point scalar or vector types.
- ///
- /// @see GLSL fma man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL genType fma(genType const& a, genType const& b, genType const& c);
-
- /// Splits x into a floating-point significand in the range
- /// [0.5, 1.0) and an integral exponent of two, such that:
- /// x = significand * exp(2, exponent)
- ///
- /// The significand is returned by the function and the
- /// exponent is returned in the parameter exp. For a
- /// floating-point value of zero, the significant and exponent
- /// are both zero. For a floating-point value that is an
- /// infinity or is not a number, the results are undefined.
- ///
- /// @tparam genType Floating-point scalar or vector types.
- ///
- /// @see GLSL frexp man page
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL genType frexp(genType x, int& exp);
-
- template
- GLM_FUNC_DECL vec frexp(vec const& v, vec& exp);
-
- /// Builds a floating-point number from x and the
- /// corresponding integral exponent of two in exp, returning:
- /// significand * exp(2, exponent)
- ///
- /// If this product is too large to be represented in the
- /// floating-point type, the result is undefined.
- ///
- /// @tparam genType Floating-point scalar or vector types.
- ///
- /// @see GLSL ldexp man page;
- /// @see GLSL 4.20.8 specification, section 8.3 Common Functions
- template
- GLM_FUNC_DECL genType ldexp(genType const& x, int const& exp);
-
- template
- GLM_FUNC_DECL vec ldexp(vec const& v, vec const& exp);
-
- /// @}
-}//namespace glm
-
-#include "detail/func_common.inl"
-
diff --git a/deps/glm/glm/detail/_features.hpp b/deps/glm/glm/detail/_features.hpp
deleted file mode 100644
index b0cbe9ff0..000000000
--- a/deps/glm/glm/detail/_features.hpp
+++ /dev/null
@@ -1,394 +0,0 @@
-#pragma once
-
-// #define GLM_CXX98_EXCEPTIONS
-// #define GLM_CXX98_RTTI
-
-// #define GLM_CXX11_RVALUE_REFERENCES
-// Rvalue references - GCC 4.3
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html
-
-// GLM_CXX11_TRAILING_RETURN
-// Rvalue references for *this - GCC not supported
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm
-
-// GLM_CXX11_NONSTATIC_MEMBER_INIT
-// Initialization of class objects by rvalues - GCC any
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html
-
-// GLM_CXX11_NONSTATIC_MEMBER_INIT
-// Non-static data member initializers - GCC 4.7
-// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm
-
-// #define GLM_CXX11_VARIADIC_TEMPLATE
-// Variadic templates - GCC 4.3
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf
-
-//
-// Extending variadic template template parameters - GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf
-
-// #define GLM_CXX11_GENERALIZED_INITIALIZERS
-// Initializer lists - GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
-
-// #define GLM_CXX11_STATIC_ASSERT
-// Static assertions - GCC 4.3
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html
-
-// #define GLM_CXX11_AUTO_TYPE
-// auto-typed variables - GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf
-
-// #define GLM_CXX11_AUTO_TYPE
-// Multi-declarator auto - GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf
-
-// #define GLM_CXX11_AUTO_TYPE
-// Removal of auto as a storage-class specifier - GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm
-
-// #define GLM_CXX11_AUTO_TYPE
-// New function declarator syntax - GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm
-
-// #define GLM_CXX11_LAMBDAS
-// New wording for C++0x lambdas - GCC 4.5
-// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf
-
-// #define GLM_CXX11_DECLTYPE
-// Declared type of an expression - GCC 4.3
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf
-
-//
-// Right angle brackets - GCC 4.3
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html
-
-//
-// Default template arguments for function templates DR226 GCC 4.3
-// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226
-
-//
-// Solving the SFINAE problem for expressions DR339 GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html
-
-// #define GLM_CXX11_ALIAS_TEMPLATE
-// Template aliases N2258 GCC 4.7
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
-
-//
-// Extern templates N1987 Yes
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm
-
-// #define GLM_CXX11_NULLPTR
-// Null pointer constant N2431 GCC 4.6
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf
-
-// #define GLM_CXX11_STRONG_ENUMS
-// Strongly-typed enums N2347 GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf
-
-//
-// Forward declarations for enums N2764 GCC 4.6
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf
-
-//
-// Generalized attributes N2761 GCC 4.8
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf
-
-//
-// Generalized constant expressions N2235 GCC 4.6
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf
-
-//
-// Alignment support N2341 GCC 4.8
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
-
-// #define GLM_CXX11_DELEGATING_CONSTRUCTORS
-// Delegating constructors N1986 GCC 4.7
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf
-
-//
-// Inheriting constructors N2540 GCC 4.8
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm
-
-// #define GLM_CXX11_EXPLICIT_CONVERSIONS
-// Explicit conversion operators N2437 GCC 4.5
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
-
-//
-// New character types N2249 GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html
-
-//
-// Unicode string literals N2442 GCC 4.5
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
-
-//
-// Raw string literals N2442 GCC 4.5
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
-
-//
-// Universal character name literals N2170 GCC 4.5
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html
-
-// #define GLM_CXX11_USER_LITERALS
-// User-defined literals N2765 GCC 4.7
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf
-
-//
-// Standard Layout Types N2342 GCC 4.5
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm
-
-// #define GLM_CXX11_DEFAULTED_FUNCTIONS
-// #define GLM_CXX11_DELETED_FUNCTIONS
-// Defaulted and deleted functions N2346 GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
-
-//
-// Extended friend declarations N1791 GCC 4.7
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf
-
-//
-// Extending sizeof N2253 GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html
-
-// #define GLM_CXX11_INLINE_NAMESPACES
-// Inline namespaces N2535 GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm
-
-// #define GLM_CXX11_UNRESTRICTED_UNIONS
-// Unrestricted unions N2544 GCC 4.6
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
-
-// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
-// Local and unnamed types as template arguments N2657 GCC 4.5
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm
-
-// #define GLM_CXX11_RANGE_FOR
-// Range-based for N2930 GCC 4.6
-// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html
-
-// #define GLM_CXX11_OVERRIDE_CONTROL
-// Explicit virtual overrides N2928 N3206 N3272 GCC 4.7
-// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm
-
-//
-// Minimal support for garbage collection and reachability-based leak detection N2670 No
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm
-
-// #define GLM_CXX11_NOEXCEPT
-// Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only)
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html
-
-//
-// Defining move special member functions N3053 GCC 4.6
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html
-
-//
-// Sequence points N2239 Yes
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
-
-//
-// Atomic operations N2427 GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
-
-//
-// Strong Compare and Exchange N2748 GCC 4.5
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html
-
-//
-// Bidirectional Fences N2752 GCC 4.8
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm
-
-//
-// Memory model N2429 GCC 4.8
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm
-
-//
-// Data-dependency ordering: atomics and memory model N2664 GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm
-
-//
-// Propagating exceptions N2179 GCC 4.4
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html
-
-//
-// Abandoning a process and at_quick_exit N2440 GCC 4.8
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm
-
-//
-// Allow atomics use in signal handlers N2547 Yes
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm
-
-//
-// Thread-local storage N2659 GCC 4.8
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm
-
-//
-// Dynamic initialization and destruction with concurrency N2660 GCC 4.3
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm
-
-//
-// __func__ predefined identifier N2340 GCC 4.3
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm
-
-//
-// C99 preprocessor N1653 GCC 4.3
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
-
-//
-// long long N1811 GCC 4.3
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf
-
-//
-// Extended integral types N1988 Yes
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf
-
-#if(GLM_COMPILER & GLM_COMPILER_GCC)
-
-# define GLM_CXX11_STATIC_ASSERT
-
-#elif(GLM_COMPILER & GLM_COMPILER_CLANG)
-# if(__has_feature(cxx_exceptions))
-# define GLM_CXX98_EXCEPTIONS
-# endif
-
-# if(__has_feature(cxx_rtti))
-# define GLM_CXX98_RTTI
-# endif
-
-# if(__has_feature(cxx_access_control_sfinae))
-# define GLM_CXX11_ACCESS_CONTROL_SFINAE
-# endif
-
-# if(__has_feature(cxx_alias_templates))
-# define GLM_CXX11_ALIAS_TEMPLATE
-# endif
-
-# if(__has_feature(cxx_alignas))
-# define GLM_CXX11_ALIGNAS
-# endif
-
-# if(__has_feature(cxx_attributes))
-# define GLM_CXX11_ATTRIBUTES
-# endif
-
-# if(__has_feature(cxx_constexpr))
-# define GLM_CXX11_CONSTEXPR
-# endif
-
-# if(__has_feature(cxx_decltype))
-# define GLM_CXX11_DECLTYPE
-# endif
-
-# if(__has_feature(cxx_default_function_template_args))
-# define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS
-# endif
-
-# if(__has_feature(cxx_defaulted_functions))
-# define GLM_CXX11_DEFAULTED_FUNCTIONS
-# endif
-
-# if(__has_feature(cxx_delegating_constructors))
-# define GLM_CXX11_DELEGATING_CONSTRUCTORS
-# endif
-
-# if(__has_feature(cxx_deleted_functions))
-# define GLM_CXX11_DELETED_FUNCTIONS
-# endif
-
-# if(__has_feature(cxx_explicit_conversions))
-# define GLM_CXX11_EXPLICIT_CONVERSIONS
-# endif
-
-# if(__has_feature(cxx_generalized_initializers))
-# define GLM_CXX11_GENERALIZED_INITIALIZERS
-# endif
-
-# if(__has_feature(cxx_implicit_moves))
-# define GLM_CXX11_IMPLICIT_MOVES
-# endif
-
-# if(__has_feature(cxx_inheriting_constructors))
-# define GLM_CXX11_INHERITING_CONSTRUCTORS
-# endif
-
-# if(__has_feature(cxx_inline_namespaces))
-# define GLM_CXX11_INLINE_NAMESPACES
-# endif
-
-# if(__has_feature(cxx_lambdas))
-# define GLM_CXX11_LAMBDAS
-# endif
-
-# if(__has_feature(cxx_local_type_template_args))
-# define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
-# endif
-
-# if(__has_feature(cxx_noexcept))
-# define GLM_CXX11_NOEXCEPT
-# endif
-
-# if(__has_feature(cxx_nonstatic_member_init))
-# define GLM_CXX11_NONSTATIC_MEMBER_INIT
-# endif
-
-# if(__has_feature(cxx_nullptr))
-# define GLM_CXX11_NULLPTR
-# endif
-
-# if(__has_feature(cxx_override_control))
-# define GLM_CXX11_OVERRIDE_CONTROL
-# endif
-
-# if(__has_feature(cxx_reference_qualified_functions))
-# define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS
-# endif
-
-# if(__has_feature(cxx_range_for))
-# define GLM_CXX11_RANGE_FOR
-# endif
-
-# if(__has_feature(cxx_raw_string_literals))
-# define GLM_CXX11_RAW_STRING_LITERALS
-# endif
-
-# if(__has_feature(cxx_rvalue_references))
-# define GLM_CXX11_RVALUE_REFERENCES
-# endif
-
-# if(__has_feature(cxx_static_assert))
-# define GLM_CXX11_STATIC_ASSERT
-# endif
-
-# if(__has_feature(cxx_auto_type))
-# define GLM_CXX11_AUTO_TYPE
-# endif
-
-# if(__has_feature(cxx_strong_enums))
-# define GLM_CXX11_STRONG_ENUMS
-# endif
-
-# if(__has_feature(cxx_trailing_return))
-# define GLM_CXX11_TRAILING_RETURN
-# endif
-
-# if(__has_feature(cxx_unicode_literals))
-# define GLM_CXX11_UNICODE_LITERALS
-# endif
-
-# if(__has_feature(cxx_unrestricted_unions))
-# define GLM_CXX11_UNRESTRICTED_UNIONS
-# endif
-
-# if(__has_feature(cxx_user_literals))
-# define GLM_CXX11_USER_LITERALS
-# endif
-
-# if(__has_feature(cxx_variadic_templates))
-# define GLM_CXX11_VARIADIC_TEMPLATES
-# endif
-
-#endif//(GLM_COMPILER & GLM_COMPILER_CLANG)
diff --git a/deps/glm/glm/detail/_fixes.hpp b/deps/glm/glm/detail/_fixes.hpp
deleted file mode 100644
index a503c7c0d..000000000
--- a/deps/glm/glm/detail/_fixes.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#include
-
-//! Workaround for compatibility with other libraries
-#ifdef max
-#undef max
-#endif
-
-//! Workaround for compatibility with other libraries
-#ifdef min
-#undef min
-#endif
-
-//! Workaround for Android
-#ifdef isnan
-#undef isnan
-#endif
-
-//! Workaround for Android
-#ifdef isinf
-#undef isinf
-#endif
-
-//! Workaround for Chrone Native Client
-#ifdef log2
-#undef log2
-#endif
-
diff --git a/deps/glm/glm/detail/_noise.hpp b/deps/glm/glm/detail/_noise.hpp
deleted file mode 100644
index 5a874a022..000000000
--- a/deps/glm/glm/detail/_noise.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-#pragma once
-
-#include "../common.hpp"
-
-namespace glm{
-namespace detail
-{
- template
- GLM_FUNC_QUALIFIER T mod289(T const& x)
- {
- return x - floor(x * (static_cast(1.0) / static_cast(289.0))) * static_cast(289.0);
- }
-
- template
- GLM_FUNC_QUALIFIER T permute(T const& x)
- {
- return mod289(((x * static_cast(34)) + static_cast(1)) * x);
- }
-
- template
- GLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> const& x)
- {
- return mod289(((x * static_cast(34)) + static_cast(1)) * x);
- }
-
- template
- GLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> const& x)
- {
- return mod289(((x * static_cast(34)) + static_cast(1)) * x);
- }
-
- template
- GLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> const& x)
- {
- return mod289(((x * static_cast(34)) + static_cast(1)) * x);
- }
-
- template
- GLM_FUNC_QUALIFIER T taylorInvSqrt(T const& r)
- {
- return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r;
- }
-
- template
- GLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> const& r)
- {
- return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r;
- }
-
- template
- GLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> const& r)
- {
- return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r;
- }
-
- template
- GLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> const& r)
- {
- return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r;
- }
-
- template
- GLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> const& t)
- {
- return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10));
- }
-
- template
- GLM_FUNC_QUALIFIER vec<3, T, Q> fade(vec<3, T, Q> const& t)
- {
- return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10));
- }
-
- template
- GLM_FUNC_QUALIFIER vec<4, T, Q> fade(vec<4, T, Q> const& t)
- {
- return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10));
- }
-}//namespace detail
-}//namespace glm
-
diff --git a/deps/glm/glm/detail/_swizzle.hpp b/deps/glm/glm/detail/_swizzle.hpp
deleted file mode 100644
index 87896ef4f..000000000
--- a/deps/glm/glm/detail/_swizzle.hpp
+++ /dev/null
@@ -1,804 +0,0 @@
-#pragma once
-
-namespace glm{
-namespace detail
-{
- // Internal class for implementing swizzle operators
- template
- struct _swizzle_base0
- {
- protected:
- GLM_FUNC_QUALIFIER T& elem(size_t i){ return (reinterpret_cast(_buffer))[i]; }
- GLM_FUNC_QUALIFIER T const& elem(size_t i) const{ return (reinterpret_cast(_buffer))[i]; }
-
- // Use an opaque buffer to *ensure* the compiler doesn't call a constructor.
- // The size 1 buffer is assumed to aligned to the actual members so that the
- // elem()
- char _buffer[1];
- };
-
- template
- struct _swizzle_base1 : public _swizzle_base0
- {
- };
-
- template
- struct _swizzle_base1<2, T, Q, E0,E1,-1,-2, Aligned> : public _swizzle_base0
- {
- GLM_FUNC_QUALIFIER vec<2, T, Q> operator ()() const { return vec<2, T, Q>(this->elem(E0), this->elem(E1)); }
- };
-
- template
- struct _swizzle_base1<3, T, Q, E0,E1,E2,-1, Aligned> : public _swizzle_base0
- {
- GLM_FUNC_QUALIFIER vec<3, T, Q> operator ()() const { return vec<3, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2)); }
- };
-
- template
- struct _swizzle_base1<4, T, Q, E0,E1,E2,E3, Aligned> : public _swizzle_base0
- {
- GLM_FUNC_QUALIFIER vec<4, T, Q> operator ()() const { return vec<4, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }
- };
-
- // Internal class for implementing swizzle operators
- /*
- Template parameters:
-
- T = type of scalar values (e.g. float, double)
- N = number of components in the vector (e.g. 3)
- E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec
-
- DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles
- containing duplicate elements so that they cannot be used as r-values).
- */
- template
- struct _swizzle_base2 : public _swizzle_base1::value>
- {
- struct op_equal
- {
- GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e = t; }
- };
-
- struct op_minus
- {
- GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e -= t; }
- };
-
- struct op_plus
- {
- GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e += t; }
- };
-
- struct op_mul
- {
- GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e *= t; }
- };
-
- struct op_div
- {
- GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e /= t; }
- };
-
- public:
- GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const T& t)
- {
- for (int i = 0; i < N; ++i)
- (*this)[i] = t;
- return *this;
- }
-
- GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vec const& that)
- {
- _apply_op(that, op_equal());
- return *this;
- }
-
- GLM_FUNC_QUALIFIER void operator -= (vec const& that)
- {
- _apply_op(that, op_minus());
- }
-
- GLM_FUNC_QUALIFIER void operator += (vec const& that)
- {
- _apply_op(that, op_plus());
- }
-
- GLM_FUNC_QUALIFIER void operator *= (vec const& that)
- {
- _apply_op(that, op_mul());
- }
-
- GLM_FUNC_QUALIFIER void operator /= (vec const& that)
- {
- _apply_op(that, op_div());
- }
-
- GLM_FUNC_QUALIFIER T& operator[](size_t i)
- {
- const int offset_dst[4] = { E0, E1, E2, E3 };
- return this->elem(offset_dst[i]);
- }
- GLM_FUNC_QUALIFIER T operator[](size_t i) const
- {
- const int offset_dst[4] = { E0, E1, E2, E3 };
- return this->elem(offset_dst[i]);
- }
-
- protected:
- template
- GLM_FUNC_QUALIFIER void _apply_op(vec const& that, const U& op)
- {
- // Make a copy of the data in this == &that.
- // The copier should optimize out the copy in cases where the function is
- // properly inlined and the copy is not necessary.
- T t[N];
- for (int i = 0; i < N; ++i)
- t[i] = that[i];
- for (int i = 0; i < N; ++i)
- op( (*this)[i], t[i] );
- }
- };
-
- // Specialization for swizzles containing duplicate elements. These cannot be modified.
- template
- struct _swizzle_base2 : public _swizzle_base1::value>
- {
- struct Stub {};
-
- GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const&) { return *this; }
-
- GLM_FUNC_QUALIFIER T operator[] (size_t i) const
- {
- const int offset_dst[4] = { E0, E1, E2, E3 };
- return this->elem(offset_dst[i]);
- }
- };
-
- template
- struct _swizzle : public _swizzle_base2
- {
- typedef _swizzle_base2 base_type;
-
- using base_type::operator=;
-
- GLM_FUNC_QUALIFIER operator vec () const { return (*this)(); }
- };
-
-//
-// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros
-//
-#define GLM_SWIZZLE_TEMPLATE1 template
-#define GLM_SWIZZLE_TEMPLATE2 template
-#define GLM_SWIZZLE_TYPE1 _swizzle
-#define GLM_SWIZZLE_TYPE2 _swizzle
-
-//
-// Wrapper for a binary operator (e.g. u.yy + v.zy)
-//
-#define GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
- GLM_SWIZZLE_TEMPLATE2 \
- GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \
- { \
- return a() OPERAND b(); \
- } \
- GLM_SWIZZLE_TEMPLATE1 \
- GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const vec& b) \
- { \
- return a() OPERAND b; \
- } \
- GLM_SWIZZLE_TEMPLATE1 \
- GLM_FUNC_QUALIFIER vec operator OPERAND ( const vec& a, const GLM_SWIZZLE_TYPE1& b) \
- { \
- return a OPERAND b(); \
- }
-
-//
-// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)
-//
-#define GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
- GLM_SWIZZLE_TEMPLATE1 \
- GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const T& b) \
- { \
- return a() OPERAND b; \
- } \
- GLM_SWIZZLE_TEMPLATE1 \
- GLM_FUNC_QUALIFIER vec operator OPERAND ( const T& a, const GLM_SWIZZLE_TYPE1& b) \
- { \
- return a OPERAND b(); \
- }
-
-//
-// Macro for wrapping a function taking one argument (e.g. abs())
-//
-#define GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \
- GLM_SWIZZLE_TEMPLATE1 \
- GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a) \
- { \
- return FUNCTION(a()); \
- }
-
-//
-// Macro for wrapping a function taking two vector arguments (e.g. dot()).
-//
-#define GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \
- GLM_SWIZZLE_TEMPLATE2 \
- GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \
- { \
- return FUNCTION(a(), b()); \
- } \
- GLM_SWIZZLE_TEMPLATE1 \
- GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b) \
- { \
- return FUNCTION(a(), b()); \
- } \
- GLM_SWIZZLE_TEMPLATE1 \
- GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename V& b) \
- { \
- return FUNCTION(a(), b); \
- } \
- GLM_SWIZZLE_TEMPLATE1 \
- GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const GLM_SWIZZLE_TYPE1& b) \
- { \
- return FUNCTION(a, b()); \
- }
-
-//
-// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).
-//
-#define GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \
- GLM_SWIZZLE_TEMPLATE2 \
- GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b, const T& c) \
- { \
- return FUNCTION(a(), b(), c); \
- } \
- GLM_SWIZZLE_TEMPLATE1 \
- GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \
- { \
- return FUNCTION(a(), b(), c); \
- } \
- GLM_SWIZZLE_TEMPLATE1 \
- GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\
- { \
- return FUNCTION(a(), b, c); \
- } \
- GLM_SWIZZLE_TEMPLATE1 \
- GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \
- { \
- return FUNCTION(a, b(), c); \
- }
-
-}//namespace detail
-}//namespace glm
-
-namespace glm
-{
- namespace detail
- {
- GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)
- GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)
- GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)
- GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)
- GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)
- GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)
- }
-
- //
- // Swizzles are distinct types from the unswizzled type. The below macros will
- // provide template specializations for the swizzle types for the given functions
- // so that the compiler does not have any ambiguity to choosing how to handle
- // the function.
- //
- // The alternative is to use the operator()() when calling the function in order
- // to explicitly convert the swizzled type to the unswizzled type.
- //
-
- //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs);
- //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos);
- //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh);
- //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all);
- //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any);
-
- //GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot);
- //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross);
- //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step);
- //GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);
-}
-
-#define GLM_SWIZZLE2_2_MEMBERS(T, Q, E0,E1) \
- struct { detail::_swizzle<2, T, Q, 0,0,-1,-2> E0 ## E0; }; \
- struct { detail::_swizzle<2, T, Q, 0,1,-1,-2> E0 ## E1; }; \
- struct { detail::_swizzle<2, T, Q, 1,0,-1,-2> E1 ## E0; }; \
- struct { detail::_swizzle<2, T, Q, 1,1,-1,-2> E1 ## E1; };
-
-#define GLM_SWIZZLE2_3_MEMBERS(T, Q, E0,E1) \
- struct { detail::_swizzle<3,T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \
- struct { detail::_swizzle<3,T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \
- struct { detail::_swizzle<3,T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \
- struct { detail::_swizzle<3,T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \
- struct { detail::_swizzle<3,T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \
- struct { detail::_swizzle<3,T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \
- struct { detail::_swizzle<3,T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \
- struct { detail::_swizzle<3,T, Q, 1,1,1,-1> E1 ## E1 ## E1; };
-
-#define GLM_SWIZZLE2_4_MEMBERS(T, Q, E0,E1) \
- struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; };
-
-#define GLM_SWIZZLE3_2_MEMBERS(T, Q, E0,E1,E2) \
- struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \
- struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \
- struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \
- struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \
- struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \
- struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \
- struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \
- struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \
- struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; };
-
-#define GLM_SWIZZLE3_3_MEMBERS(T, Q ,E0,E1,E2) \
- struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; };
-
-#define GLM_SWIZZLE3_4_MEMBERS(T, Q, E0,E1,E2) \
- struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
- struct { detail::_swizzle<4,T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
- struct { detail::_swizzle<4,T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
- struct { detail::_swizzle<4,T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; };
-
-#define GLM_SWIZZLE4_2_MEMBERS(T, Q, E0,E1,E2,E3) \
- struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \
- struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \
- struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \
- struct { detail::_swizzle<2,T, Q, 0,3,-1,-2> E0 ## E3; }; \
- struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \
- struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \
- struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \
- struct { detail::_swizzle<2,T, Q, 1,3,-1,-2> E1 ## E3; }; \
- struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \
- struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \
- struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; \
- struct { detail::_swizzle<2,T, Q, 2,3,-1,-2> E2 ## E3; }; \
- struct { detail::_swizzle<2,T, Q, 3,0,-1,-2> E3 ## E0; }; \
- struct { detail::_swizzle<2,T, Q, 3,1,-1,-2> E3 ## E1; }; \
- struct { detail::_swizzle<2,T, Q, 3,2,-1,-2> E3 ## E2; }; \
- struct { detail::_swizzle<2,T, Q, 3,3,-1,-2> E3 ## E3; };
-
-#define GLM_SWIZZLE4_3_MEMBERS(T, Q, E0,E1,E2,E3) \
- struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 0,0,3,-1> E0 ## E0 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 0,1,3,-1> E0 ## E1 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 0,2,3,-1> E0 ## E2 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 0,3,0,-1> E0 ## E3 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 0,3,1,-1> E0 ## E3 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 0,3,2,-1> E0 ## E3 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 0,3,3,-1> E0 ## E3 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 1,0,3,-1> E1 ## E0 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 1,1,3,-1> E1 ## E1 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 1,2,3,-1> E1 ## E2 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 1,3,0,-1> E1 ## E3 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 1,3,1,-1> E1 ## E3 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 1,3,2,-1> E1 ## E3 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 1,3,3,-1> E1 ## E3 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 2,0,3,-1> E2 ## E0 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 2,1,3,-1> E2 ## E1 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 2,2,3,-1> E2 ## E2 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 2,3,0,-1> E2 ## E3 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 2,3,1,-1> E2 ## E3 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 2,3,2,-1> E2 ## E3 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 2,3,3,-1> E2 ## E3 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 3,0,0,-1> E3 ## E0 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 3,0,1,-1> E3 ## E0 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 3,0,2,-1> E3 ## E0 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 3,0,3,-1> E3 ## E0 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 3,1,0,-1> E3 ## E1 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 3,1,1,-1> E3 ## E1 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 3,1,2,-1> E3 ## E1 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 3,1,3,-1> E3 ## E1 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 3,2,0,-1> E3 ## E2 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 3,2,1,-1> E3 ## E2 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 3,2,2,-1> E3 ## E2 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 3,2,3,-1> E3 ## E2 ## E3; }; \
- struct { detail::_swizzle<3, T, Q, 3,3,0,-1> E3 ## E3 ## E0; }; \
- struct { detail::_swizzle<3, T, Q, 3,3,1,-1> E3 ## E3 ## E1; }; \
- struct { detail::_swizzle<3, T, Q, 3,3,2,-1> E3 ## E3 ## E2; }; \
- struct { detail::_swizzle<3, T, Q, 3,3,3,-1> E3 ## E3 ## E3; };
-
-#define GLM_SWIZZLE4_4_MEMBERS(T, Q, E0,E1,E2,E3) \
- struct { detail::_swizzle<4, T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \
- struct { detail::_swizzle<4, T, Q, 3,3,3,3> E3 ## E3 ## E3 ## E3; };
diff --git a/deps/glm/glm/detail/_swizzle_func.hpp b/deps/glm/glm/detail/_swizzle_func.hpp
deleted file mode 100644
index d93c6afd5..000000000
--- a/deps/glm/glm/detail/_swizzle_func.hpp
+++ /dev/null
@@ -1,682 +0,0 @@
-#pragma once
-
-#define GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, CONST, A, B) \
- vec<2, T, Q> A ## B() CONST \
- { \
- return vec<2, T, Q>(this->A, this->B); \
- }
-
-#define GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, CONST, A, B, C) \
- vec<3, T, Q> A ## B ## C() CONST \
- { \
- return vec<3, T, Q>(this->A, this->B, this->C); \
- }
-
-#define GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, CONST, A, B, C, D) \
- vec<4, T, Q> A ## B ## C ## D() CONST \
- { \
- return vec<4, T, Q>(this->A, this->B, this->C, this->D); \
- }
-
-#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(T, P, L, CONST, A, B) \
- template \
- vec vec::A ## B() CONST \
- { \
- return vec<2, T, Q>(this->A, this->B); \
- }
-
-#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(T, P, L, CONST, A, B, C) \
- template \
- vec<3, T, Q> vec::A ## B ## C() CONST \
- { \
- return vec<3, T, Q>(this->A, this->B, this->C); \
- }
-
-#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(T, P, L, CONST, A, B, C, D) \
- template \
- vec<4, T, Q> vec::A ## B ## C ## D() CONST \
- { \
- return vec<4, T, Q>(this->A, this->B, this->C, this->D); \
- }
-
-#define GLM_MUTABLE
-
-#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, A, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, A, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, B, A)
-
-#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(T, P) \
- GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, x, y) \
- GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, r, g) \
- GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, s, t)
-
-#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B)
-
-#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, B, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, C, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, A, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, C, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, A, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, B, A)
-
-#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, A, B, C) \
- GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
- GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C)
-
-#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, P) \
- GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, x, y, z) \
- GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, r, g, b) \
- GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, s, t, p)
-
-#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, D) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, D) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, D) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, A) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, C)
-
-#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, B)
-
-#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, C, A)
-
-#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, A, B, C, D) \
- GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
- GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
- GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)
-
-#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, P) \
- GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, x, y, z, w) \
- GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, r, g, b, a) \
- GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, s, t, p, q)
-
-#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B)
-
-#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B)
-
-#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B)
-
-#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, A, B) \
- GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \
- GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \
- GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B)
-
-#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P) \
- GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, x, y) \
- GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, r, g) \
- GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, s, t)
-
-#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C)
-
-#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C)
-
-#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C)
-
-#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, A, B, C) \
- GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
- GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
- GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C)
-
-#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) \
- GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, x, y, z) \
- GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, r, g, b) \
- GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, s, t, p)
-
-#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, D) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, D) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, D) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, A) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, B) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, C) \
- GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, D)
-
-#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, D) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, A) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, B) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, C) \
- GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, D)
-
-#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, D) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, A) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, B) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, C) \
- GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, D)
-
-#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, A, B, C, D) \
- GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
- GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
- GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)
-
-#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) \
- GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, x, y, z, w) \
- GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, r, g, b, a) \
- GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, s, t, p, q)
-
diff --git a/deps/glm/glm/detail/_vectorize.hpp b/deps/glm/glm/detail/_vectorize.hpp
deleted file mode 100644
index 1fcaec315..000000000
--- a/deps/glm/glm/detail/_vectorize.hpp
+++ /dev/null
@@ -1,162 +0,0 @@
-#pragma once
-
-namespace glm{
-namespace detail
-{
- template class vec, length_t L, typename R, typename T, qualifier Q>
- struct functor1{};
-
- template class vec, typename R, typename T, qualifier Q>
- struct functor1
- {
- 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 class vec, typename R, typename T, qualifier Q>
- struct functor1
- {
- 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 class vec, typename R, typename T, qualifier Q>
- struct functor1
- {
- 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 class vec, typename R, typename T, qualifier Q>
- struct functor1
- {
- 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 class vec, length_t L, typename T, qualifier Q>
- struct functor2{};
-
- template class vec, typename T, qualifier Q>
- struct functor2
- {
- 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 class vec, typename T, qualifier Q>
- struct functor2
- {
- 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 class vec, typename T, qualifier Q>
- struct functor2
- {
- 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 class vec, typename T, qualifier Q>
- struct functor2
- {
- 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 class vec, length_t L, typename T, qualifier Q>
- struct functor2_vec_sca{};
-
- template class vec, typename T, qualifier Q>
- struct functor2_vec_sca
- {
- 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 class vec, typename T, qualifier Q>
- struct functor2_vec_sca
- {
- 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 class vec, typename T, qualifier Q>
- struct functor2_vec_sca
- {
- 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 class vec, typename T, qualifier Q>
- struct functor2_vec_sca
- {
- 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
- struct functor2_vec_int {};
-
- template
- 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
- 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
- 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
- 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 detail
-}//namespace glm
diff --git a/deps/glm/glm/detail/compute_common.hpp b/deps/glm/glm/detail/compute_common.hpp
deleted file mode 100644
index cc24b9e62..000000000
--- a/deps/glm/glm/detail/compute_common.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-#pragma once
-
-#include "setup.hpp"
-#include
-
-namespace glm{
-namespace detail
-{
- template
- struct compute_abs
- {};
-
- template
- struct compute_abs
- {
- GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x)
- {
- GLM_STATIC_ASSERT(
- std::numeric_limits::is_iec559 || std::numeric_limits::is_signed,
- "'abs' only accept floating-point and integer scalar or vector inputs");
-
- return x >= genFIType(0) ? x : -x;
- // TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff;
- }
- };
-
-#if GLM_COMPILER & GLM_COMPILER_CUDA
- template<>
- struct compute_abs
- {
- GLM_FUNC_QUALIFIER GLM_CONSTEXPR static float call(float x)
- {
- return fabsf(x);
- }
- };
-#endif
-
- template
- struct compute_abs
- {
- GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x)
- {
- GLM_STATIC_ASSERT(
- (!std::numeric_limits::is_signed && std::numeric_limits::is_integer),
- "'abs' only accept floating-point and integer scalar or vector inputs");
- return x;
- }
- };
-}//namespace detail
-}//namespace glm
diff --git a/deps/glm/glm/detail/compute_vector_relational.hpp b/deps/glm/glm/detail/compute_vector_relational.hpp
deleted file mode 100644
index 167b6345d..000000000
--- a/deps/glm/glm/detail/compute_vector_relational.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#pragma once
-
-//#include "compute_common.hpp"
-#include "setup.hpp"
-#include
-
-namespace glm{
-namespace detail
-{
- template
- struct compute_equal
- {
- GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b)
- {
- return a == b;
- }
- };
-/*
- template
- struct compute_equal
- {
- GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b)
- {
- return detail::compute_abs::is_signed>::call(b - a) <= static_cast(0);
- //return std::memcmp(&a, &b, sizeof(T)) == 0;
- }
- };
-*/
-}//namespace detail
-}//namespace glm
diff --git a/deps/glm/glm/detail/func_common.inl b/deps/glm/glm/detail/func_common.inl
deleted file mode 100644
index 85b9ae73c..000000000
--- a/deps/glm/glm/detail/func_common.inl
+++ /dev/null
@@ -1,787 +0,0 @@
-/// @ref core
-/// @file glm/detail/func_common.inl
-
-#include "../vector_relational.hpp"
-#include "compute_common.hpp"
-#include "type_vec1.hpp"
-#include "type_vec2.hpp"
-#include "type_vec3.hpp"
-#include "type_vec4.hpp"
-#include "_vectorize.hpp"
-#include
-
-namespace glm
-{
- // min
- template
- GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType min(genType x, genType y)
- {
- GLM_STATIC_ASSERT(std::numeric_limits