diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4115667c..e5f3c7be 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -16,9 +16,13 @@ if(CMAKE_COMPILER_IS_GNUCXX)
#add_definitions(-mfpmath=387)
#add_definitions(-ffast-math)
#add_definitions(-O3)
+
+ #add_definitions(-fprofile-arcs -ftest-coverage) gcov
+ #ctest_enable_coverage()
endif()
include_directories(".")
+include_directories("./test/external")
add_subdirectory(glm)
add_subdirectory(test)
diff --git a/CTestConfig.cmake b/CTestConfig.cmake
new file mode 100644
index 00000000..d3388358
--- /dev/null
+++ b/CTestConfig.cmake
@@ -0,0 +1,13 @@
+## This file should be placed in the root directory of your project.
+## Then modify the CMakeLists.txt file in the root directory of your
+## project to incorporate the testing dashboard.
+## # The following are required to uses Dart and the Cdash dashboard
+## ENABLE_TESTING()
+## INCLUDE(CTest)
+set(CTEST_PROJECT_NAME "GLM")
+set(CTEST_NIGHTLY_START_TIME "00:00:00 EST")
+
+set(CTEST_DROP_METHOD "http")
+set(CTEST_DROP_SITE "my.cdash.org")
+set(CTEST_DROP_LOCATION "/submit.php?project=GLM")
+set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/doc/coreModules.doxy b/doc/coreModules.doxy
deleted file mode 100644
index 1961ff71..00000000
--- a/doc/coreModules.doxy
+++ /dev/null
@@ -1,64 +0,0 @@
-/*!
- \defgroup core GLM Core
-
- \brief The core of GLM, which implements exactly and only the GLSL specification to the degree possible.
-
- The GLM core consists of \ref core_types "C++ types that mirror GLSL types",
- \ref core_funcs "C++ functions that mirror the GLSL functions". It also includes
- \ref core_precision "a set of precision-based types" that can be used in the appropriate
- functions. The C++ types are all based on a basic set of \ref core_template "template types".
-
- The best documentation for GLM Core is the current GLSL specification,
- version 4.1
- (pdf file).
- There are a few \ref pg_differences "differences" between GLM core and GLSL.
-**/
-
-
-/*!
- \defgroup core_types Types
-
- \brief The standard types defined by the specification.
-
- These types are all typedefs of more generalized, template types. To see the definiton
- of these template types, go to \ref core_template.
-
- \ingroup core
-**/
-
-/*!
- \defgroup core_precision Precision types
-
- \brief Non-GLSL types that are used to define precision-based types.
-
- The GLSL language allows the user to define the precision of a particular variable.
- In OpenGL's GLSL, these precision qualifiers have no effect; they are there for compatibility
- with OpenGL ES's precision qualifiers, where they \em do have an effect.
-
- C++ has no language equivalent to precision qualifiers. So GLM provides the next-best thing:
- a number of typedefs of the \ref core_template that use a particular precision.
-
- None of these types make any guarantees about the actual precision used.
-
- \ingroup core
-**/
-
-/*!
- \defgroup core_template Template types
-
- \brief The generic template types used as the basis for the core types.
-
- These types are all templates used to define the actual \ref core_types.
- These templetes are implementation details of GLM types and should not be used explicitly.
-
- \ingroup core
-**/
-
-/*!
- \defgroup core_funcs Functions
-
- \brief The functions defined by the specification.
-
- \ingroup core
-**/
-
diff --git a/doc/gtcModules.doxy b/doc/gtcModules.doxy
deleted file mode 100644
index 3c4e49d2..00000000
--- a/doc/gtcModules.doxy
+++ /dev/null
@@ -1,108 +0,0 @@
-/*!
- \defgroup gtc GTC Extensions (Stable)
-
- \brief Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program.
-
- GTC extensions aim to be stable.
-
- Even if it's highly unrecommended, it's possible to include all the extensions at once by
- including . Otherwise, each extension needs to be included a specific file.
-**/
-
-/*!
- \defgroup gtc_half_float GLM_GTC_half_float: Half-precision floating-point based types and functions.
- \ingroup gtc
-
- Defines the half-precision floating-point type, along with various typedefs for vectors and matrices.
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtc_matrix_access GLM_GTC_matrix_access: Access matrix rows and columns.
- \ingroup gtc
-
- Defines functions to access rows or columns of a matrix easily.
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtc_matrix_integer GLM_GTC_matrix_integer: Integer matrix types.
- \ingroup gtc
-
- Defines a number of matrices with integer types.
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtc_matrix_inverse GLM_GTC_matrix_inverse: Additional matrix inverse function
- \ingroup gtc
-
- Defines additional matrix inverting functions.
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtc_matrix_transform GLM_GTC_matrix_transform: Matrix transform functions.
- \ingroup gtc
-
- \brief Defines functions that generate common transformation matrices.
-
- The matrices generated by this extension use standard OpenGL fixed-function
- conventions. For example, the lookAt function generates a transform from world
- space into the specific eye space that the projective matrix functions (
- perspective, ortho, etc) are designed to expect. The OpenGL compatibility
- specifications defines the particular layout of this eye space.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtc_quaternion GLM_GTC_quaternion: Quaternion types and functions
- \ingroup gtc
-
- \brief Defines a templated quaternion type and several quaternion operations.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtc_type_precision GLM_GTC_type_precision: Vector and matrix types with defined precisions.
- \ingroup gtc
-
- \brief Defines specific C++-based precision types.
-
- \ref core_precision defines types based on GLSL's precision qualifiers. This
- extension defines types based on explicitly-sized C++ data types.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtc_type_ptr GLM_GTC_type_ptr: Memory layout access.
- \ingroup gtc
-
- \brief Used to get a pointer to the memory layout of a basic type.
-
- This extension defines an overloaded function, glm::value_ptr, which
- takes any of the \ref core_template "core template types". It returns
- a pointer to the memory layout of the object. Matrix types store their values
- in column-major order.
-
- This is useful for uploading data to matrices or copying data to buffer objects.
-
- Example:
-
- \code
-#include
-#include
-
-glm::vec3 aVector(3);
-glm::mat4 someMatrix(1.0);
-
-glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector));
-glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix));
- \endcode
-
- need to be included to use these functionalities.
-**/
-
diff --git a/doc/gtxModules.doxy b/doc/gtxModules.doxy
deleted file mode 100644
index d585cf8b..00000000
--- a/doc/gtxModules.doxy
+++ /dev/null
@@ -1,498 +0,0 @@
-/*!
- \defgroup gtx GTX Extensions (Experimental)
-
- \brief Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program.
-
- Experimental extensions are useful functions and types, but the development of
- their API and functionality is not necessarily stable. They can change substantially
- between versions. Backwards compatibility is not much of an issue for them.
-
- Even if it's highly unrecommended, it's possible to include all the extensions at once by
- including . Otherwise, each extension needs to be included a specific file.
-**/
-
-/*!
- \defgroup gtx_associated_min_max GLM_GTX_associated_min_max: Associated Min/Max
- \ingroup gtx
-
- \brief Min and max functions that return associated values not the compared onces.
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_bit GLM_GTX_bit: Extended bitwise operations
- \ingroup gtx
-
- \brief Allow to perform bit operations on integer values
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_closest_point GLM_GTX_closest_point: Find closest point
- \ingroup gtx
-
- \brief Find the point on a straight line which is the closet of a point.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_color_cast GLM_GTX_color_cast: Color conversion
- \ingroup gtx
-
- \brief Conversion between two color types.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_color_space GLM_GTX_color_space: RGB to HSV conversion
- \ingroup gtx
-
- \brief Related to RGB to HSV conversions and operations.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_color_space_YCoCg GLM_GTX_color_space_YCoCg: RGB to YCoCg conversion
- \ingroup gtx
-
- \brief RGB to YCoCg conversions and operations
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_compatibility GLM_GTX_compatibility: Cg and HLSL compatibility
- \ingroup gtx
-
- \brief Provide functions to increase the compatibility with Cg and HLSL languages
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_component_wise GLM_GTX_component_wise: Component wise
- \ingroup gtx
-
- \brief Operations between components of a type
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_epsilon GLM_GTX_epsilon: Epsilon comparison
- \ingroup gtx
-
- \brief Comparison functions for a user defined epsilon values.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_euler_angles GLM_GTX_euler_angles: Matrix from euler angles
- \ingroup gtx
-
- \brief Build matrices from Euler angles.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_extend GLM_GTX_extend: Position extending
- \ingroup gtx
-
- \brief Extend a position from a source to a position at a defined length.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_extented_min_max GLM_GTX_extented_min_max: Extended min max
- \ingroup gtx
-
- \brief Min and max functions for 3 to 4 parameters.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_fast_exponential GLM_GTX_fast_exponential: Fast exponentiation functions
- \ingroup gtx
-
- \brief Fast but less accurate implementations of exponential based functions.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_fast_square_root GLM_GTX_fast_square_root: Fast square root functions
- \ingroup gtx
-
- \brief Fast but less accurate implementations of square root based functions.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_fast_trigonometry GLM_GTX_fast_trigonometry: Fast trigonometric functions
- \ingroup gtx
-
- \brief Fast but less accurate implementations of trigonometric functions.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_handed_coordinate_space GLM_GTX_handed_coordinate_space: Space Handedness
- \ingroup gtx
-
- \brief To know if a set of three basis vectors defines a right or left-handed coordinate system.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_inertia GLM_GTX_inertia: Intertial matrix
- \ingroup gtx
-
- \brief Create inertia matrices
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_int_10_10_10_2 GLM_GTX_int_10_10_10_2: Packed integer
- \ingroup gtx
-
- \brief Pack vector to 1010102 integers. Storage only.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_integer GLM_GTX_integer: Extended integer functions
- \ingroup gtx
-
- \brief Add support for integer for core functions
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_intersect GLM_GTX_intersect: Intersection tests
- \ingroup gtx
-
- \brief Add intersection functions
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_log_base GLM_GTX_log_base: Log with base
- \ingroup gtx
-
- \brief Logarithm for any base. base can be a vector or a scalar.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_matrix_cross_product GLM_GTX_matrix_cross_product: Cross product matrix form
- \ingroup gtx
-
- \brief Build cross product matrices
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_matrix_major_storage GLM_GTX_matrix_major_storage: Build matrix
- \ingroup gtx
-
- \brief Build matrices with specific matrix order, row or column
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_matrix_operation GLM_GTX_matrix_operation: Extended matrix operations
- \ingroup gtx
-
- \brief Build diagonal matrices from vectors.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_matrix_query GLM_GTX_matrix_query: Query matrix properties
- \ingroup gtx
-
- \brief Query to evaluate matrix properties
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_mixed_product GLM_GTX_mixed_producte: Mixed product
- \ingroup gtx
-
- \brief Mixed product of 3 vectors.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_multiple GLM_GTX_multiple: Multiples
- \ingroup gtx
-
- \brief Find the closest number of a number multiple of other number.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_norm GLM_GTX_norm: Vector norm calculations
- \ingroup gtx
-
- \brief Various way to compute vector norms.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_normal GLM_GTX_normal: Compute normals
- \ingroup gtx
-
- \brief Compute the normal of a triangle.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_normalize_dot GLM_GTX_normalize_dot: Normalize dot product
- \ingroup gtx
-
- \brief Dot product of vectors that need to be normalize with a single square root.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_number_precision GLM_GTX_number_precision: Number precision
- \ingroup gtx
-
- \brief Defined size types.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_ocl_type GLM_GTX_ocl_type: OpenCL types
- \ingroup gtx
-
- \brief OpenCL types.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_optimum_pow GLM_GTX_optimum_pow: Optimum pow
- \ingroup gtx
-
- \brief Integer exponentiation of power functions.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_orthonormalize GLM_GTX_orthonormalize: Orthonormalize
- \ingroup gtx
-
- \brief Orthonormalize matrices.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_perpendicular GLM_GTX_perpendicular: Perpendicular
- \ingroup gtx
-
- \brief Perpendicular of a vector from other one
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_polar_coordinates GLM_GTX_polar_coordinates: Polar coordinates
- \ingroup gtx
-
- \brief Conversion from Euclidean space to polar space and revert.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_projection GLM_GTX_projection: Projection
- \ingroup gtx
-
- \brief Projection of a vector to other one
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_quaternion GLM_GTX_quaternion: Extented quaternion types and functions
- \ingroup gtx
-
- \brief Extented quaternion types and functions
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_random GLM_GTX_random: Random
- \ingroup gtx
-
- \brief Generate random number from various distribution methods
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_raw_data GLM_GTX_raw_data: Raw data
- \ingroup gtx
-
- \brief Projection of a vector to other one
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_reciprocal GLM_GTX_reciprocal: Reciprocal
- \ingroup gtx
-
- \brief Define secant, cosecant and cotangent functions.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_rotate_vector GLM_GTX_rotate_vector: Rotate vector
- \ingroup gtx
-
- \brief Function to directly rotate a vector
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_simd_mat4 GLM_GTX_simd_mat4: SIMD mat4 type and functions
- \ingroup gtx
-
- \brief SIMD implementation of mat4 type.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_simd_vec4 GLM_GTX_simd_vec4: SIMD vec4 type and functions
- \ingroup gtx
-
- \brief SIMD implementation of vec4 type.
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_spline GLM_GTX_spline: Spline
- \ingroup gtx
-
- \brief Spline functions
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_string_cast GLM_GTX_string_cast: String cast
- \ingroup gtx
-
- \brief Setup strings for GLM type values
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_transform GLM_GTX_transform: Extented transformation matrices
- \ingroup gtx
-
- \brief Add transformation matrices
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_transform2 GLM_GTX_transform2: Extra transformation matrices
- \ingroup gtx
-
- \brief Add extra transformation matrices
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_unsigned_int GLM_GTX_unsigned_int: Unsigned int
- \ingroup gtx
-
- \brief Add support for unsigned integer for core functions
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_vector_access GLM_GTX_vector_access: Vector access
- \ingroup gtx
-
- \brief Function to set values to vectors
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_vector_angle GLM_GTX_vector_angle: Vector angle
- \ingroup gtx
-
- \brief Compute angle between vectors
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_vector_query GLM_GTX_vector_query: Vector query
- \ingroup gtx
-
- \brief Query informations of vector types
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_verbose_operator GLM_GTX_verbose_operator: Verbose operator
- \ingroup gtx
-
- \brief Use words to replace operators
-
- need to be included to use these functionalities.
-**/
-
-/*!
- \defgroup gtx_wrap GLM_GTX_wrap: Texture coordinate wrap modes
- \ingroup gtx
-
- \brief Wrapping mode of texture coordinates.
-
- need to be included to use these functionalities.
-**/
-
diff --git a/doc/man.doxy b/doc/man.doxy
index e9d6d3f1..546e0c5c 100644
--- a/doc/man.doxy
+++ b/doc/man.doxy
@@ -31,7 +31,7 @@ PROJECT_NAME =
# This could be handy for archiving the generated documentation or
# if some version control system is used.
-PROJECT_NUMBER = 0.9.2
+PROJECT_NUMBER = 0.9.3
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer
diff --git a/doc/pages.doxy b/doc/pages.doxy
index 8fa428c7..1115d6ab 100644
--- a/doc/pages.doxy
+++ b/doc/pages.doxy
@@ -311,38 +311,38 @@ void foo()
- glRotate[fd]
- - \link glm::gtc::matrix_transform::rotate glm::rotate \endlink
+ - \ref rotate()
- glScale[fd]
- - \link glm::gtc::matrix_transform::scale glm::scale \endlink
+ - \ref scale()
- glTranslate[fd]
- - \link glm::gtc::matrix_transform::translate glm::translate \endlink
+ - \ref translate()
- glLoadIdentity
- The default constructor of all matrix types creates an identity matrix.
- glMultMatrix[fd]
- Per the GLSL specification, the multiplication operator is overloaded for all matrix types. Multiplying two matrices together will perform matrix multiplication.
- glLoadTransposeMatrix[fd]
- - \link glm::core::function::matrix::transpose glm::transpose \endlink
+ - \ref transpose()
- glMultTransposeMatrix
- Combine the last two.
- glFrustum
- - \link glm::gtc::matrix_transform::frustum glm::frustum \endlink
+ - \ref frustum()
- glOrtho
- - \link glm::gtc::matrix_transform::ortho glm::ortho \endlink
+ - \ref ortho()
- gluLookAt
- - \link glm::gtc::matrix_transform::lookAt glm::lookAt \endlink
+ - \ref lookAt()
\section deprecated_glu GLU function replacements
- gluOrtho2D
- - \link glm::gtc::matrix_transform::ortho glm::ortho \endlink
+ - \ref ortho()
- gluPerspective
- - \link glm::gtc::matrix_transform::perspective glm::perspective \endlink
+ - \ref perspective()
- gluProject
- - \link glm::gtc::matrix_transform::project glm::project \endlink
+ - \ref project()
- gluUnProject
- - \link glm::gtc::matrix_transform::unProject glm::unProject \endlink
+ - \ref unProject()
**/
@@ -407,7 +407,7 @@ void foo()
\section faq7 Should I use 'using namespace glm;'?
This is unwise. Chances are that if 'using namespace glm;' is called, name collisions will happen.
- GLSL names for functions are fairly generic, so it is entirely likely that there is another function called, for example, \link glm::sqrt sqrt \endlink.
+ GLSL names for functions are fairly generic, so it is entirely likely that there is another function called, for example, \link glm::sqrt() sqrt \endlink.
For frequent use of particular types, they can be brough into the global
namespace with a 'using' declaration like this:
diff --git a/doc/virtrevModules.doxy b/doc/virtrevModules.doxy
deleted file mode 100644
index b617cb90..00000000
--- a/doc/virtrevModules.doxy
+++ /dev/null
@@ -1,14 +0,0 @@
-/*!
- \defgroup virtrev VIRTREV Extensions
-
- \brief Extensions develop and maintain by Mathieu [matrem] Roumillac (http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showprofile&User=22660).
-**/
-
-/*!
- \defgroup virtrev_xstream GLM_VIRTREV_xstream: xml like output
- \ingroup virtrev
-
- \brief Streaming vector and matrix in a xml way.
-
- Include for this functionality.
-**/
diff --git a/glm/core/_detail.hpp b/glm/core/_detail.hpp
index 4d6a57ed..e6d2e128 100644
--- a/glm/core/_detail.hpp
+++ b/glm/core/_detail.hpp
@@ -1,17 +1,39 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-07-24
-// Updated : 2008-08-31
-// Licence : This source is under MIT License
-// File : glm/core/_detail.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/_detail.hpp
+/// @date 2008-07-24 / 2011-06-14
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
#ifndef glm_core_detail
#define glm_core_detail
#include "setup.hpp"
#include
+#if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
+#include
+#endif
namespace glm{
namespace detail
@@ -305,25 +327,26 @@ namespace detail
is_bool = is_bool::_YES
};
};
-
+
//////////////////
// type
-
+
typedef signed char int8;
typedef signed short int16;
typedef signed int int32;
typedef detail::sint64 int64;
-
+
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned int uint32;
typedef detail::uint64 uint64;
-
+
typedef detail::thalf float16;
typedef float float32;
typedef double float64;
-
+
}//namespace detail
+
}//namespace glm
#if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005))
diff --git a/glm/core/_fixes.hpp b/glm/core/_fixes.hpp
index ba708003..e1c2b14f 100644
--- a/glm/core/_fixes.hpp
+++ b/glm/core/_fixes.hpp
@@ -1,11 +1,30 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2011-02-21
-// Updated : 2011-02-21
-// Licence : This source is under MIT License
-// File : glm/core/_fixes.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/_fixes.hpp
+/// @date 2011-02-21 / 2011-02-16
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
//! Workaround for compatibility with other libraries
#ifdef max
diff --git a/glm/core/_swizzle.hpp b/glm/core/_swizzle.hpp
index e5dcf492..aaf18caa 100644
--- a/glm/core/_swizzle.hpp
+++ b/glm/core/_swizzle.hpp
@@ -1,11 +1,30 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2006-04-20
-// Updated : 2008-08-22
-// Licence : This source is under MIT License
-// File : glm/core/_swizzle.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/_swizzle.hpp
+/// @date 2006-04-20 / 2011-02-16
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
#ifndef glm_core_swizzle
#define glm_core_swizzle
@@ -30,515 +49,515 @@ namespace glm
}//namespace glm
-namespace glm{
-namespace detail
-{
- //! Internal class for implementing swizzle operators
- /*!
- Template parameters:
-
- Type = type of scalar values (e.g. float, double)
- Class = class the swizzle is applies to (e.g. vector3f)
- N = number of components in the vector (e.g. 3)
- E0...3 = what index the n-th element of this swizzle refers to
- */
- template
- struct swizzle_base
- {
- swizzle_base& operator= (const Class& that)
- {
- static const int offset_dst[4] = { E0, E1, E2, E3 };
-
- Type t[N];
- for (int i = 0; i < N; ++i)
- t[i] = that[i];
- for (int i = 0; i < N; ++i)
- elem(offset_dst[i]) = t[i];
-
- return *this;
- }
-
- swizzle_base& operator= (const Type& t)
- {
- static const int offset_dst[4] = { E0, E1, E2, E3 };
-
- for (int i = 0; i < N; ++i)
- elem(offset_dst[i]) = t;
-
- return *this;
- }
-
- protected:
- Type& elem (size_t i) { return (reinterpret_cast(_buffer))[i]; }
-
- // Use an opaque buffer to *ensure* the compiler doesn't call a constructor.
- // Otherwise, a vec4 containg all swizzles might end up with 1000s of
- // constructor calls
- char _buffer[sizeof(Type) * N];
- };
-
- template
- struct swizzle_base
- {
- struct Stub {};
- swizzle_base& operator= (const Stub& that) {}
-
- protected:
- Type& elem (size_t i) { return (reinterpret_cast(_buffer))[i]; }
- char _buffer[sizeof(Type) * N];
- };
-
- //! Internal class for implementing swizzle operators
- template
- struct swizzle2 : public swizzle_base
- {
- using swizzle_base::operator=;
- operator P () { return P(this->elem(E0), this->elem(E1)); }
- };
-
- //! Internal class for implementing swizzle operators
- template
- struct swizzle2_3 : public swizzle_base
- {
- using swizzle_base::operator=;
- operator P () { return P(this->elem(E0), this->elem(E1), this->elem(E2)); }
- };
-
- //! Internal class for implementing swizzle operators
- template
- struct swizzle2_4 : public swizzle_base
- {
- using swizzle_base::operator=;
- operator P () { return P(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }
- };
-
- //! Internal class for implementing swizzle operators
- template
- struct swizzle3 : public swizzle_base
- {
- using swizzle_base::operator=;
- operator P () { return P(this->elem(E0), this->elem(E1), this->elem(E2)); }
- };
-
- //! Internal class for implementing swizzle operators
- template
- struct swizzle3_2 : public swizzle_base
- {
- using swizzle_base::operator=;
- operator P () { return P(this->elem(E0), this->elem(E1)); }
- };
-
- //! Internal class for implementing swizzle operators
- template
- struct swizzle3_4 : public swizzle_base
- {
- using swizzle_base::operator=;
- operator P () { return P(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }
- };
-
- //! Internal class for implementing swizzle operators
- template
- struct swizzle4 : public swizzle_base
- {
- using swizzle_base::operator=;
- operator P () { return P(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }
- };
-
- //! Internal class for implementing swizzle operators
- template
- struct swizzle4_2 : public swizzle_base
- {
- using swizzle_base::operator=;
- operator P () { return P(this->elem(E0), this->elem(E1)); }
- };
-
-
- //! Internal class for implementing swizzle operators
- template
- struct swizzle4_3 : public swizzle_base
- {
- using swizzle_base::operator=;
- operator P () { return P(this->elem(E0), this->elem(E1), this->elem(E2)); }
- };
-
-}//namespace detail
-}//namespace glm
-
-#define _GLM_SWIZZLE2_2_MEMBERS(T,P,E0,E1) \
- struct { glm::detail::swizzle2 E0 ## E0; }; \
- struct { glm::detail::swizzle2 E0 ## E1; }; \
- struct { glm::detail::swizzle2 E1 ## E0; }; \
- struct { glm::detail::swizzle2 E1 ## E1; };
-
-#define _GLM_SWIZZLE2_3_MEMBERS(T,P2,E0,E1) \
- struct { glm::detail::swizzle2_3 E0 ## E0 ## E0; }; \
- struct { glm::detail::swizzle2_3 E0 ## E0 ## E1; }; \
- struct { glm::detail::swizzle2_3 E0 ## E1 ## E0; }; \
- struct { glm::detail::swizzle2_3 E0 ## E1 ## E1; }; \
- struct { glm::detail::swizzle2_3 E1 ## E0 ## E0; }; \
- struct { glm::detail::swizzle2_3 E1 ## E0 ## E1; }; \
- struct { glm::detail::swizzle2_3 E1 ## E1 ## E0; }; \
- struct { glm::detail::swizzle2_3 E1 ## E1 ## E1; };
-
-
-#define _GLM_SWIZZLE3_3_MEMBERS(T,P,E0,E1,E2) \
- struct { glm::detail::swizzle3 E0 ## E0 ## E0; }; \
- struct { glm::detail::swizzle3 E0 ## E0 ## E1; }; \
- struct { glm::detail::swizzle3 E0 ## E0 ## E2; }; \
- struct { glm::detail::swizzle3 E0 ## E1 ## E0; }; \
- struct { glm::detail::swizzle3 E0 ## E1 ## E1; }; \
- struct { glm::detail::swizzle3 E0 ## E1 ## E2; }; \
- struct { glm::detail::swizzle3 E0 ## E2 ## E0; }; \
- struct { glm::detail::swizzle3 E0 ## E2 ## E1; }; \
- struct { glm::detail::swizzle3 E0 ## E2 ## E2; }; \
- \
- struct { glm::detail::swizzle3 E1 ## E0 ## E0; }; \
- struct { glm::detail::swizzle3 E1 ## E0 ## E1; }; \
- struct { glm::detail::swizzle3 E1 ## E0 ## E2; }; \
- struct { glm::detail::swizzle3 E1 ## E1 ## E0; }; \
- struct { glm::detail::swizzle3 E1 ## E1 ## E1; }; \
- struct { glm::detail::swizzle3 E1 ## E1 ## E2; }; \
- struct { glm::detail::swizzle3 E1 ## E2 ## E0; }; \
- struct { glm::detail::swizzle3 E1 ## E2 ## E1; }; \
- struct { glm::detail::swizzle3 E1 ## E2 ## E2; }; \
- \
- struct { glm::detail::swizzle3 E2 ## E0 ## E0; }; \
- struct { glm::detail::swizzle3 E2 ## E0 ## E1; }; \
- struct { glm::detail::swizzle3 E2 ## E0 ## E2; }; \
- struct { glm::detail::swizzle3 E2 ## E1 ## E0; }; \
- struct { glm::detail::swizzle3 E2 ## E1 ## E1; }; \
- struct { glm::detail::swizzle3 E2 ## E1 ## E2; }; \
- struct { glm::detail::swizzle3 E2 ## E2 ## E0; }; \
- struct { glm::detail::swizzle3 E2 ## E2 ## E1; }; \
- struct { glm::detail::swizzle3 E2 ## E2 ## E2; };
-
-#define _GLM_SWIZZLE3_2_MEMBERS(T,P2,E0,E1,E2) \
- struct { glm::detail::swizzle3_2 E0 ## E0; }; \
- struct { glm::detail::swizzle3_2 E0 ## E1; }; \
- struct { glm::detail::swizzle3_2 E0 ## E2; }; \
- struct { glm::detail::swizzle3_2 E1 ## E0; }; \
- struct { glm::detail::swizzle3_2 E1 ## E1; }; \
- struct { glm::detail::swizzle3_2 E1 ## E2; }; \
- struct { glm::detail::swizzle3_2 E2 ## E0; }; \
- struct { glm::detail::swizzle3_2 E2 ## E1; }; \
- struct { glm::detail::swizzle3_2 E2 ## E2; };
-
-#define _GLM_SWIZZLE3_4_MEMBERS(T,P2,E0,E1,E2) \
- struct { glm::detail::swizzle3_4 E0 ## E0 ## E0 ## E0; }; \
- struct { glm::detail::swizzle3_4 E0 ## E0 ## E0 ## E1; }; \
- struct { glm::detail::swizzle3_4 E0 ## E0 ## E0 ## E2; }; \
- struct { glm::detail::swizzle3_4 E0 ## E0 ## E1 ## E0; }; \
- struct { glm::detail::swizzle3_4 E0 ## E0 ## E1 ## E1; }; \
- struct { glm::detail::swizzle3_4 E0 ## E0 ## E1 ## E2; }; \
- struct { glm::detail::swizzle3_4 E0 ## E0 ## E2 ## E0; }; \
- struct { glm::detail::swizzle3_4 E0 ## E0 ## E2 ## E1; }; \
- struct { glm::detail::swizzle3_4 E0 ## E0 ## E2 ## E2; }; \
- struct { glm::detail::swizzle3_4 E0 ## E1 ## E0 ## E0; }; \
- struct { glm::detail::swizzle3_4 E0 ## E1 ## E0 ## E1; }; \
- struct { glm::detail::swizzle3_4 E0 ## E1 ## E0 ## E2; }; \
- struct { glm::detail::swizzle3_4 E0 ## E1 ## E1 ## E0; }; \
- struct { glm::detail::swizzle3_4 E0 ## E1 ## E1 ## E1; }; \
- struct { glm::detail::swizzle3_4 E0 ## E1 ## E1 ## E2; }; \
- struct { glm::detail::swizzle3_4 E0 ## E1 ## E2 ## E0; }; \
- struct { glm::detail::swizzle3_4 E0 ## E1 ## E2 ## E1; }; \
- struct { glm::detail::swizzle3_4 E0 ## E1 ## E2 ## E2; }; \
- struct { glm::detail::swizzle3_4 E0 ## E2 ## E0 ## E0; }; \
- struct { glm::detail::swizzle3_4 E0 ## E2 ## E0 ## E1; }; \
- struct { glm::detail::swizzle3_4 E0 ## E2 ## E0 ## E2; }; \
- struct { glm::detail::swizzle3_4 E0 ## E2 ## E1 ## E0; }; \
- struct { glm::detail::swizzle3_4 E0 ## E2 ## E1 ## E1; }; \
- struct { glm::detail::swizzle3_4 E0 ## E2 ## E1 ## E2; }; \
- struct { glm::detail::swizzle3_4 E0 ## E2 ## E2 ## E0; }; \
- struct { glm::detail::swizzle3_4 E0 ## E2 ## E2 ## E1; }; \
- struct { glm::detail::swizzle3_4 E0 ## E2 ## E2 ## E2; }; \
- \
- struct { glm::detail::swizzle3_4 E1 ## E0 ## E0 ## E0; }; \
- struct { glm::detail::swizzle3_4 E1 ## E0 ## E0 ## E1; }; \
- struct { glm::detail::swizzle3_4 E1 ## E0 ## E0 ## E2; }; \
- struct { glm::detail::swizzle3_4 E1 ## E0 ## E1 ## E0; }; \
- struct { glm::detail::swizzle3_4 E1 ## E0 ## E1 ## E1; }; \
- struct { glm::detail::swizzle3_4 E1 ## E0 ## E1 ## E2; }; \
- struct { glm::detail::swizzle3_4 E1 ## E0 ## E2 ## E0; }; \
- struct { glm::detail::swizzle3_4 E1 ## E0 ## E2 ## E1; }; \
- struct { glm::detail::swizzle3_4 E1 ## E0 ## E2 ## E2; }; \
- struct { glm::detail::swizzle3_4 E1 ## E1 ## E0 ## E0; }; \
- struct { glm::detail::swizzle3_4 E1 ## E1 ## E0 ## E1; }; \
- struct { glm::detail::swizzle3_4 E1 ## E1 ## E0 ## E2; }; \
- struct { glm::detail::swizzle3_4 E1 ## E1 ## E1 ## E0; }; \
- struct { glm::detail::swizzle3_4 E1 ## E1 ## E1 ## E1; }; \
- struct { glm::detail::swizzle3_4 E1 ## E1 ## E1 ## E2; }; \
- struct { glm::detail::swizzle3_4 E1 ## E1 ## E2 ## E0; }; \
- struct { glm::detail::swizzle3_4 E1 ## E1 ## E2 ## E1; }; \
- struct { glm::detail::swizzle3_4 E1 ## E1 ## E2 ## E2; }; \
- struct { glm::detail::swizzle3_4 E1 ## E2 ## E0 ## E0; }; \
- struct { glm::detail::swizzle3_4 E1 ## E2 ## E0 ## E1; }; \
- struct { glm::detail::swizzle3_4 E1 ## E2 ## E0 ## E2; }; \
- struct { glm::detail::swizzle3_4 E1 ## E2 ## E1 ## E0; }; \
- struct { glm::detail::swizzle3_4 E1 ## E2 ## E1 ## E1; }; \
- struct { glm::detail::swizzle3_4 E1 ## E2 ## E1 ## E2; }; \
- struct { glm::detail::swizzle3_4 E1 ## E2 ## E2 ## E0; }; \
- struct { glm::detail::swizzle3_4 E1 ## E2 ## E2 ## E1; }; \
- struct { glm::detail::swizzle3_4 E1 ## E2 ## E2 ## E2; }; \
- \
- struct { glm::detail::swizzle3_4 E2 ## E0 ## E0 ## E0; }; \
- struct { glm::detail::swizzle3_4 E2 ## E0 ## E0 ## E1; }; \
- struct { glm::detail::swizzle3_4 E2 ## E0 ## E0 ## E2; }; \
- struct { glm::detail::swizzle3_4 E2 ## E0 ## E1 ## E0; }; \
- struct { glm::detail::swizzle3_4 E2 ## E0 ## E1 ## E1; }; \
- struct { glm::detail::swizzle3_4 E2 ## E0 ## E1 ## E2; }; \
- struct { glm::detail::swizzle3_4 E2 ## E0 ## E2 ## E0; }; \
- struct { glm::detail::swizzle3_4 E2 ## E0 ## E2 ## E1; }; \
- struct { glm::detail::swizzle3_4 E2 ## E0 ## E2 ## E2; }; \
- struct { glm::detail::swizzle3_4 E2 ## E1 ## E0 ## E0; }; \
- struct { glm::detail::swizzle3_4 E2 ## E1 ## E0 ## E1; }; \
- struct { glm::detail::swizzle3_4 E2 ## E1 ## E0 ## E2; }; \
- struct { glm::detail::swizzle3_4 E2 ## E1 ## E1 ## E0; }; \
- struct { glm::detail::swizzle3_4 E2 ## E1 ## E1 ## E1; }; \
- struct { glm::detail::swizzle3_4 E2 ## E1 ## E1 ## E2; }; \
- struct { glm::detail::swizzle3_4 E2 ## E1 ## E2 ## E0; }; \
- struct { glm::detail::swizzle3_4 E2 ## E1 ## E2 ## E1; }; \
- struct { glm::detail::swizzle3_4 E2 ## E1 ## E2 ## E2; }; \
- struct { glm::detail::swizzle3_4 E2 ## E2 ## E0 ## E0; }; \
- struct { glm::detail::swizzle3_4 E2 ## E2 ## E0 ## E1; }; \
- struct { glm::detail::swizzle3_4 E2 ## E2 ## E0 ## E2; }; \
- struct { glm::detail::swizzle3_4 E2 ## E2 ## E1 ## E0; }; \
- struct { glm::detail::swizzle3_4 E2 ## E2 ## E1 ## E1; }; \
- struct { glm::detail::swizzle3_4 E2 ## E2 ## E1 ## E2; }; \
- struct { glm::detail::swizzle3_4 E2 ## E2 ## E2 ## E0; }; \
- struct { glm::detail::swizzle3_4 E2 ## E2 ## E2 ## E1; }; \
- struct { glm::detail::swizzle3_4 E2 ## E2 ## E2 ## E2; }; \
-
-
-#define _GLM_SWIZZLE2_4_MEMBERS(T,P2,E0,E1) \
- struct { glm::detail::swizzle2_4 E0 ## E0 ## E0 ## E0; }; \
- struct { glm::detail::swizzle2_4 E0 ## E0 ## E0 ## E1; }; \
- struct { glm::detail::swizzle2_4 E0 ## E0 ## E1 ## E0; }; \
- struct { glm::detail::swizzle2_4 E0 ## E0 ## E1 ## E1; }; \
- struct { glm::detail::swizzle2_4 E0 ## E1 ## E0 ## E0; }; \
- struct { glm::detail::swizzle2_4 E0 ## E1 ## E0 ## E1; }; \
- struct { glm::detail::swizzle2_4 E0 ## E1 ## E1 ## E0; }; \
- struct { glm::detail::swizzle2_4 E0 ## E1 ## E1 ## E1; }; \
- struct { glm::detail::swizzle2_4 E1 ## E0 ## E0 ## E0; }; \
- struct { glm::detail::swizzle2_4 E1 ## E0 ## E0 ## E1; }; \
- struct { glm::detail::swizzle2_4 E1 ## E0 ## E1 ## E0; }; \
- struct { glm::detail::swizzle2_4 E1 ## E0 ## E1 ## E1; }; \
- struct { glm::detail::swizzle2_4 E1 ## E1 ## E0 ## E0; }; \
- struct { glm::detail::swizzle2_4 E1 ## E1 ## E0 ## E1; }; \
- struct { glm::detail::swizzle2_4 E1 ## E1 ## E1 ## E0; }; \
- struct { glm::detail::swizzle2_4 E1 ## E1 ## E1 ## E1; };
-
-
-#define _GLM_SWIZZLE4_2_MEMBERS(T,P,E0,E1,E2,E3) \
- struct { glm::detail::swizzle4_2 E0 ## E0; }; \
- struct { glm::detail::swizzle4_2 E0 ## E1; }; \
- struct { glm::detail::swizzle4_2 E0 ## E2; }; \
- struct { glm::detail::swizzle4_2 E0 ## E3; }; \
- struct { glm::detail::swizzle4_2 E1 ## E0; }; \
- struct { glm::detail::swizzle4_2 E1 ## E1; }; \
- struct { glm::detail::swizzle4_2 E1 ## E2; }; \
- struct { glm::detail::swizzle4_2