C++ AMP test

This commit is contained in:
Christophe Riccio 2013-03-26 00:26:41 +01:00
parent 7739e9c3e3
commit 563427cf88
10 changed files with 383 additions and 336 deletions

View File

@ -29,7 +29,7 @@
#define VECTORIZE2_VEC(func) \ #define VECTORIZE2_VEC(func) \
template <typename T> \ template <typename T> \
GLM_FUNC_QUALIFIER detail::tvec2<T> func( \ GLM_FUNC_QUALIFIER detail::tvec2<T> func( \
detail::tvec2<T> const & v) \ detail::tvec2<T> const & v) GLM_FUNC_POST \
{ \ { \
return detail::tvec2<T>( \ return detail::tvec2<T>( \
func(v.x), \ func(v.x), \
@ -39,7 +39,7 @@
#define VECTORIZE3_VEC(func) \ #define VECTORIZE3_VEC(func) \
template <typename T> \ template <typename T> \
GLM_FUNC_QUALIFIER detail::tvec3<T> func( \ GLM_FUNC_QUALIFIER detail::tvec3<T> func( \
detail::tvec3<T> const & v) \ detail::tvec3<T> const & v) GLM_FUNC_POST \
{ \ { \
return detail::tvec3<T>( \ return detail::tvec3<T>( \
func(v.x), \ func(v.x), \
@ -50,7 +50,7 @@
#define VECTORIZE4_VEC(func) \ #define VECTORIZE4_VEC(func) \
template <typename T> \ template <typename T> \
GLM_FUNC_QUALIFIER detail::tvec4<T> func( \ GLM_FUNC_QUALIFIER detail::tvec4<T> func( \
detail::tvec4<T> const & v) \ detail::tvec4<T> const & v) GLM_FUNC_POST \
{ \ { \
return detail::tvec4<T>( \ return detail::tvec4<T>( \
func(v.x), \ func(v.x), \
@ -70,7 +70,7 @@
( \ ( \
detail::tvec2<T> const & x, \ detail::tvec2<T> const & x, \
typename detail::tvec2<T>::value_type const & y \ typename detail::tvec2<T>::value_type const & y \
) \ ) GLM_FUNC_POST \
{ \ { \
return detail::tvec2<T>( \ return detail::tvec2<T>( \
func(x.x, y), \ func(x.x, y), \
@ -83,7 +83,7 @@
( \ ( \
detail::tvec3<T> const & x, \ detail::tvec3<T> const & x, \
typename detail::tvec3<T>::value_type const & y \ typename detail::tvec3<T>::value_type const & y \
) \ ) GLM_FUNC_POST \
{ \ { \
return detail::tvec3<T>( \ return detail::tvec3<T>( \
func(x.x, y), \ func(x.x, y), \
@ -97,7 +97,7 @@
( \ ( \
detail::tvec4<T> const & x, \ detail::tvec4<T> const & x, \
typename detail::tvec4<T>::value_type const & y \ typename detail::tvec4<T>::value_type const & y \
) \ ) GLM_FUNC_POST \
{ \ { \
return detail::tvec4<T>( \ return detail::tvec4<T>( \
func(x.x, y), \ func(x.x, y), \
@ -117,7 +117,7 @@
( \ ( \
detail::tvec2<T> const & x, \ detail::tvec2<T> const & x, \
detail::tvec2<T> const & y \ detail::tvec2<T> const & y \
) \ ) GLM_FUNC_POST \
{ \ { \
return detail::tvec2<T>( \ return detail::tvec2<T>( \
func(x.x, y.x), \ func(x.x, y.x), \
@ -130,7 +130,7 @@
( \ ( \
detail::tvec3<T> const & x, \ detail::tvec3<T> const & x, \
detail::tvec3<T> const & y \ detail::tvec3<T> const & y \
) \ ) GLM_FUNC_POST \
{ \ { \
return detail::tvec3<T>( \ return detail::tvec3<T>( \
func(x.x, y.x), \ func(x.x, y.x), \
@ -144,7 +144,7 @@
( \ ( \
detail::tvec4<T> const & x, \ detail::tvec4<T> const & x, \
detail::tvec4<T> const & y \ detail::tvec4<T> const & y \
) \ ) GLM_FUNC_POST \
{ \ { \
return detail::tvec4<T>( \ return detail::tvec4<T>( \
func(x.x, y.x), \ func(x.x, y.x), \

View File

@ -50,7 +50,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml">GLSL abs man page</a> /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml">GLSL abs man page</a>
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
template <typename genType> template <typename genType>
genType abs(genType const & x); genType abs(genType const & x) GLM_FUNC_POST;
/// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.
/// ///
@ -59,7 +59,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml">GLSL sign man page</a> /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml">GLSL sign man page</a>
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
template <typename genType> template <typename genType>
genType sign(genType const & x); genType sign(genType const & x) GLM_FUNC_POST;
/// Returns a value equal to the nearest integer that is less then or equal to x. /// Returns a value equal to the nearest integer that is less then or equal to x.
/// ///
@ -68,7 +68,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml">GLSL floor man page</a> /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml">GLSL floor man page</a>
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
template <typename genType> template <typename genType>
genType floor(genType const & x); genType floor(genType const & x) GLM_FUNC_POST;
/// Returns a value equal to the nearest integer to x /// Returns a value equal to the nearest integer to x
/// whose absolute value is not larger than the absolute value of x. /// whose absolute value is not larger than the absolute value of x.
@ -78,7 +78,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml">GLSL trunc man page</a> /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml">GLSL trunc man page</a>
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
template <typename genType> template <typename genType>
genType trunc(genType const & x); genType trunc(genType const & x) GLM_FUNC_POST;
/// Returns a value equal to the nearest integer to x. /// Returns a value equal to the nearest integer to x.
/// The fraction 0.5 will round in a direction chosen by the /// The fraction 0.5 will round in a direction chosen by the
@ -91,7 +91,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a> /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a>
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
template <typename genType> template <typename genType>
genType round(genType const & x); genType round(genType const & x) GLM_FUNC_POST;
/// Returns a value equal to the nearest integer to x. /// Returns a value equal to the nearest integer to x.
/// A fractional part of 0.5 will round toward the nearest even /// A fractional part of 0.5 will round toward the nearest even
@ -103,7 +103,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
/// @see <a href="http://developer.amd.com/documentation/articles/pages/New-Round-to-Even-Technique.aspx">New round to even technique</a> /// @see <a href="http://developer.amd.com/documentation/articles/pages/New-Round-to-Even-Technique.aspx">New round to even technique</a>
template <typename genType> template <typename genType>
genType roundEven(genType const & x); genType roundEven(genType const & x) GLM_FUNC_POST;
/// Returns a value equal to the nearest integer /// Returns a value equal to the nearest integer
/// that is greater than or equal to x. /// that is greater than or equal to x.
@ -113,7 +113,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml">GLSL ceil man page</a> /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml">GLSL ceil man page</a>
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
template <typename genType> template <typename genType>
genType ceil(genType const & x); genType ceil(genType const & x) GLM_FUNC_POST;
/// Return x - floor(x). /// Return x - floor(x).
/// ///
@ -122,7 +122,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml">GLSL fract man page</a> /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml">GLSL fract man page</a>
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
template <typename genType> template <typename genType>
genType fract(genType const & x); genType fract(genType const & x) GLM_FUNC_POST;
/// Modulus. Returns x - y * floor(x / y) /// Modulus. Returns x - y * floor(x / y)
/// for each component in x using the floating point value y. /// for each component in x using the floating point value y.
@ -134,7 +134,7 @@ namespace glm
template <typename genType> template <typename genType>
genType mod( genType mod(
genType const & x, genType const & x,
genType const & y); genType const & y) GLM_FUNC_POST;
/// Modulus. Returns x - y * floor(x / y) /// Modulus. Returns x - y * floor(x / y)
/// for each component in x using the floating point value y. /// for each component in x using the floating point value y.
@ -146,7 +146,7 @@ namespace glm
template <typename genType> template <typename genType>
genType mod( genType mod(
genType const & x, genType const & x,
typename genType::value_type const & y); typename genType::value_type const & y) GLM_FUNC_POST;
/// Returns the fractional part of x and sets i to the integer /// Returns the fractional part of x and sets i to the integer
/// part (as a whole number floating point value). Both the /// part (as a whole number floating point value). Both the
@ -171,12 +171,12 @@ namespace glm
template <typename genType> template <typename genType>
genType min( genType min(
genType const & x, genType const & x,
genType const & y); genType const & y) GLM_FUNC_POST;
template <typename genType> template <typename genType>
genType min( genType min(
genType const & x, genType const & x,
typename genType::value_type const & y); typename genType::value_type const & y) GLM_FUNC_POST;
/// Returns y if x < y; otherwise, it returns x. /// Returns y if x < y; otherwise, it returns x.
/// ///
@ -187,12 +187,12 @@ namespace glm
template <typename genType> template <typename genType>
genType max( genType max(
genType const & x, genType const & x,
genType const & y); genType const & y) GLM_FUNC_POST;
template <typename genType> template <typename genType>
genType max( genType max(
genType const & x, genType const & x,
typename genType::value_type const & y); typename genType::value_type const & y) GLM_FUNC_POST;
/// Returns min(max(x, minVal), maxVal) for each component in x /// Returns min(max(x, minVal), maxVal) for each component in x
/// using the floating-point values minVal and maxVal. /// using the floating-point values minVal and maxVal.
@ -205,13 +205,13 @@ namespace glm
genType clamp( genType clamp(
genType const & x, genType const & x,
genType const & minVal, genType const & minVal,
genType const & maxVal); genType const & maxVal) GLM_FUNC_POST;
template <typename genType> template <typename genType>
genType clamp( genType clamp(
genType const & x, genType const & x,
typename genType::value_type const & minVal, typename genType::value_type const & minVal,
typename genType::value_type const & maxVal); typename genType::value_type const & maxVal) GLM_FUNC_POST;
/// If genTypeU is a floating scalar or vector: /// If genTypeU is a floating scalar or vector:
/// Returns x * (1.0 - a) + y * a, i.e., the linear blend of /// Returns x * (1.0 - a) + y * a, i.e., the linear blend of
@ -256,7 +256,7 @@ namespace glm
/// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter. /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter.
/// @endcode /// @endcode
template <typename genTypeT, typename genTypeU> template <typename genTypeT, typename genTypeU>
genTypeT mix(genTypeT const & x, genTypeT const & y, genTypeU const & a); genTypeT mix(genTypeT const & x, genTypeT const & y, genTypeU const & a) GLM_FUNC_POST;
//! Returns 0.0 if x < edge, otherwise it returns 1.0. //! Returns 0.0 if x < edge, otherwise it returns 1.0.
//! //!
@ -265,12 +265,12 @@ namespace glm
template <typename genType> template <typename genType>
genType step( genType step(
genType const & edge, genType const & edge,
genType const & x); genType const & x) GLM_FUNC_POST;
template <typename genType> template <typename genType>
genType step( genType step(
typename genType::value_type const & edge, typename genType::value_type const & edge,
genType const & x); genType const & x) GLM_FUNC_POST;
/// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and /// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and
/// performs smooth Hermite interpolation between 0 and 1 /// performs smooth Hermite interpolation between 0 and 1
@ -290,13 +290,13 @@ namespace glm
genType smoothstep( genType smoothstep(
genType const & edge0, genType const & edge0,
genType const & edge1, genType const & edge1,
genType const & x); genType const & x) GLM_FUNC_POST;
template <typename genType> template <typename genType>
genType smoothstep( genType smoothstep(
typename genType::value_type const & edge0, typename genType::value_type const & edge0,
typename genType::value_type const & edge1, typename genType::value_type const & edge1,
genType const & x); genType const & x) GLM_FUNC_POST;
/// Returns true if x holds a NaN (not a number) /// Returns true if x holds a NaN (not a number)
/// representation in the underlying implementation's set of /// representation in the underlying implementation's set of
@ -311,7 +311,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml">GLSL isnan man page</a> /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml">GLSL isnan man page</a>
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
template <typename genType> template <typename genType>
typename genType::bool_type isnan(genType const & x); typename genType::bool_type isnan(genType const & x) GLM_FUNC_POST;
/// Returns true if x holds a positive infinity or negative /// Returns true if x holds a positive infinity or negative
/// infinity representation in the underlying implementation's /// infinity representation in the underlying implementation's
@ -324,7 +324,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml">GLSL isinf man page</a> /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml">GLSL isinf man page</a>
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
template <typename genType> template <typename genType>
typename genType::bool_type isinf(genType const & x); typename genType::bool_type isinf(genType const & x) GLM_FUNC_POST;
/// Returns a signed integer value representing /// Returns a signed integer value representing
/// the encoding of a floating-point value. The floatingpoint /// the encoding of a floating-point value. The floatingpoint
@ -336,7 +336,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a> /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a>
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
template <typename genType, typename genIType> template <typename genType, typename genIType>
genIType floatBitsToInt(genType const & value); genIType floatBitsToInt(genType const & value) GLM_FUNC_POST;
/// Returns a unsigned integer value representing /// Returns a unsigned integer value representing
/// the encoding of a floating-point value. The floatingpoint /// the encoding of a floating-point value. The floatingpoint
@ -348,7 +348,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a> /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a>
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
template <typename genType, typename genUType> template <typename genType, typename genUType>
genUType floatBitsToUint(genType const & value); genUType floatBitsToUint(genType const & value) GLM_FUNC_POST;
/// Returns a floating-point value corresponding to a signed /// Returns a floating-point value corresponding to a signed
/// integer encoding of a floating-point value. /// integer encoding of a floating-point value.
@ -364,7 +364,7 @@ namespace glm
/// ///
/// @todo Clarify this declaration, we don't need to actually specify the return type /// @todo Clarify this declaration, we don't need to actually specify the return type
template <typename genType, typename genIType> template <typename genType, typename genIType>
genType intBitsToFloat(genIType const & value); genType intBitsToFloat(genIType const & value) GLM_FUNC_POST;
/// Returns a floating-point value corresponding to a /// Returns a floating-point value corresponding to a
/// unsigned integer encoding of a floating-point value. /// unsigned integer encoding of a floating-point value.
@ -380,7 +380,7 @@ namespace glm
/// ///
/// @todo Clarify this declaration, we don't need to actually specify the return type /// @todo Clarify this declaration, we don't need to actually specify the return type
template <typename genType, typename genUType> template <typename genType, typename genUType>
genType uintBitsToFloat(genUType const & value); genType uintBitsToFloat(genUType const & value) GLM_FUNC_POST;
/// Computes and returns a * b + c. /// Computes and returns a * b + c.
/// ///
@ -389,7 +389,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml">GLSL fma man page</a> /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml">GLSL fma man page</a>
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
template <typename genType> template <typename genType>
genType fma(genType const & a, genType const & b, genType const & c); genType fma(genType const & a, genType const & b, genType const & c) GLM_FUNC_POST;
/// Splits x into a floating-point significand in the range /// Splits x into a floating-point significand in the range
/// [0.5, 1.0) and an integral exponent of two, such that: /// [0.5, 1.0) and an integral exponent of two, such that:
@ -406,7 +406,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml">GLSL frexp man page</a> /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml">GLSL frexp man page</a>
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
template <typename genType, typename genIType> template <typename genType, typename genIType>
genType frexp(genType const & x, genIType & exp); genType frexp(genType const & x, genIType & exp) GLM_FUNC_POST;
/// Builds a floating-point number from x and the /// Builds a floating-point number from x and the
/// corresponding integral exponent of two in exp, returning: /// corresponding integral exponent of two in exp, returning:
@ -420,7 +420,7 @@ namespace glm
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml">GLSL ldexp man page</a>; /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml">GLSL ldexp man page</a>;
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
template <typename genType, typename genIType> template <typename genType, typename genIType>
genType ldexp(genType const & x, genIType const & exp); genType ldexp(genType const & x, genIType const & exp) GLM_FUNC_POST;
/// @} /// @}
}//namespace glm }//namespace glm

View File

@ -36,7 +36,7 @@ namespace detail
template <typename genFIType> template <typename genFIType>
struct Abs_<genFIType, true> struct Abs_<genFIType, true>
{ {
static genFIType get(genFIType const & x) static genFIType get(genFIType const & x) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT( GLM_STATIC_ASSERT(
detail::type<genFIType>::is_float || detail::type<genFIType>::is_float ||
@ -49,7 +49,7 @@ namespace detail
template <typename genFIType> template <typename genFIType>
struct Abs_<genFIType, false> struct Abs_<genFIType, false>
{ {
static genFIType get(genFIType const & x) static genFIType get(genFIType const & x) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT( GLM_STATIC_ASSERT(
detail::type<genFIType>::is_uint, "'abs' only accept floating-point and integer inputs"); detail::type<genFIType>::is_uint, "'abs' only accept floating-point and integer inputs");
@ -63,7 +63,7 @@ namespace detail
GLM_FUNC_QUALIFIER genFIType abs GLM_FUNC_QUALIFIER genFIType abs
( (
genFIType const & x genFIType const & x
) ) GLM_FUNC_POST
{ {
return detail::Abs_<genFIType, std::numeric_limits<genFIType>::is_signed>::get(x); return detail::Abs_<genFIType, std::numeric_limits<genFIType>::is_signed>::get(x);
} }
@ -76,7 +76,7 @@ namespace detail
GLM_FUNC_QUALIFIER genFIType sign GLM_FUNC_QUALIFIER genFIType sign
( (
genFIType const & x genFIType const & x
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT( GLM_STATIC_ASSERT(
detail::type<genFIType>::is_float || detail::type<genFIType>::is_float ||
@ -96,13 +96,13 @@ namespace detail
// floor // floor
template <> template <>
GLM_FUNC_QUALIFIER detail::half floor<detail::half>(detail::half const & x) GLM_FUNC_QUALIFIER detail::half floor<detail::half>(detail::half const & x) GLM_FUNC_POST
{ {
return detail::half(::std::floor(float(x))); return detail::half(::std::floor(float(x)));
} }
template <typename genType> template <typename genType>
GLM_FUNC_QUALIFIER genType floor(genType const & x) GLM_FUNC_QUALIFIER genType floor(genType const & x) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'floor' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'floor' only accept floating-point inputs");
@ -113,7 +113,7 @@ namespace detail
// trunc // trunc
template <typename genType> template <typename genType>
GLM_FUNC_QUALIFIER genType trunc(genType const & x) GLM_FUNC_QUALIFIER genType trunc(genType const & x) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'trunc' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'trunc' only accept floating-point inputs");
return x < 0 ? -floor(-x) : floor(x); return x < 0 ? -floor(-x) : floor(x);
@ -123,7 +123,7 @@ namespace detail
// round // round
template <typename genType> template <typename genType>
GLM_FUNC_QUALIFIER genType round(genType const& x) GLM_FUNC_QUALIFIER genType round(genType const& x) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'round' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'round' only accept floating-point inputs");
@ -147,7 +147,7 @@ namespace detail
// roundEven // roundEven
template <typename genType> template <typename genType>
GLM_FUNC_QUALIFIER genType roundEven(genType const & x) GLM_FUNC_QUALIFIER genType roundEven(genType const & x) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'roundEven' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'roundEven' only accept floating-point inputs");
@ -181,7 +181,7 @@ namespace detail
// ceil // ceil
template <typename genType> template <typename genType>
GLM_FUNC_QUALIFIER genType ceil(genType const & x) GLM_FUNC_QUALIFIER genType ceil(genType const & x) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'ceil' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'ceil' only accept floating-point inputs");
@ -195,7 +195,7 @@ namespace detail
GLM_FUNC_QUALIFIER genType fract GLM_FUNC_QUALIFIER genType fract
( (
genType const & x genType const & x
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'fract' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'fract' only accept floating-point inputs");
@ -210,7 +210,7 @@ namespace detail
( (
genType const & x, genType const & x,
genType const & y genType const & y
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'mod' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'mod' only accept floating-point inputs");
@ -226,7 +226,7 @@ namespace detail
( (
genType const & x, genType const & x,
genType & i genType & i
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'modf' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'modf' only accept floating-point inputs");
@ -238,7 +238,7 @@ namespace detail
( (
detail::tvec2<valType> const & x, detail::tvec2<valType> const & x,
detail::tvec2<valType> & i detail::tvec2<valType> & i
) ) GLM_FUNC_POST
{ {
return detail::tvec2<valType>( return detail::tvec2<valType>(
modf(x.x, i.x), modf(x.x, i.x),
@ -250,7 +250,7 @@ namespace detail
( (
detail::tvec3<valType> const & x, detail::tvec3<valType> const & x,
detail::tvec3<valType> & i detail::tvec3<valType> & i
) ) GLM_FUNC_POST
{ {
return detail::tvec3<valType>( return detail::tvec3<valType>(
modf(x.x, i.x), modf(x.x, i.x),
@ -263,7 +263,7 @@ namespace detail
( (
detail::tvec4<valType> const & x, detail::tvec4<valType> const & x,
detail::tvec4<valType> & i detail::tvec4<valType> & i
) ) GLM_FUNC_POST
{ {
return detail::tvec4<valType>( return detail::tvec4<valType>(
modf(x.x, i.x), modf(x.x, i.x),
@ -286,7 +286,7 @@ namespace detail
( (
genType const & x, genType const & x,
genType const & y genType const & y
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT( GLM_STATIC_ASSERT(
detail::type<genType>::is_float || detail::type<genType>::is_float ||
@ -305,7 +305,7 @@ namespace detail
( (
genType const & x, genType const & x,
genType const & y genType const & y
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT( GLM_STATIC_ASSERT(
detail::type<genType>::is_float || detail::type<genType>::is_float ||
@ -325,7 +325,7 @@ namespace detail
valType const & x, valType const & x,
valType const & minVal, valType const & minVal,
valType const & maxVal valType const & maxVal
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT( GLM_STATIC_ASSERT(
detail::type<valType>::is_float || detail::type<valType>::is_float ||
@ -341,7 +341,7 @@ namespace detail
detail::tvec2<T> const & x, detail::tvec2<T> const & x,
typename detail::tvec2<T>::value_type const & minVal, typename detail::tvec2<T>::value_type const & minVal,
typename detail::tvec2<T>::value_type const & maxVal typename detail::tvec2<T>::value_type const & maxVal
) ) GLM_FUNC_POST
{ {
return detail::tvec2<T>( return detail::tvec2<T>(
clamp(x.x, minVal, maxVal), clamp(x.x, minVal, maxVal),
@ -354,7 +354,7 @@ namespace detail
detail::tvec3<T> const & x, detail::tvec3<T> const & x,
typename detail::tvec3<T>::value_type const & minVal, typename detail::tvec3<T>::value_type const & minVal,
typename detail::tvec3<T>::value_type const & maxVal typename detail::tvec3<T>::value_type const & maxVal
) ) GLM_FUNC_POST
{ {
return detail::tvec3<T>( return detail::tvec3<T>(
clamp(x.x, minVal, maxVal), clamp(x.x, minVal, maxVal),
@ -368,7 +368,7 @@ namespace detail
detail::tvec4<T> const & x, detail::tvec4<T> const & x,
typename detail::tvec4<T>::value_type const & minVal, typename detail::tvec4<T>::value_type const & minVal,
typename detail::tvec4<T>::value_type const & maxVal typename detail::tvec4<T>::value_type const & maxVal
) ) GLM_FUNC_POST
{ {
return detail::tvec4<T>( return detail::tvec4<T>(
clamp(x.x, minVal, maxVal), clamp(x.x, minVal, maxVal),
@ -383,7 +383,7 @@ namespace detail
detail::tvec2<T> const & x, detail::tvec2<T> const & x,
detail::tvec2<T> const & minVal, detail::tvec2<T> const & minVal,
detail::tvec2<T> const & maxVal detail::tvec2<T> const & maxVal
) ) GLM_FUNC_POST
{ {
return detail::tvec2<T>( return detail::tvec2<T>(
clamp(x.x, minVal.x, maxVal.x), clamp(x.x, minVal.x, maxVal.x),
@ -396,7 +396,7 @@ namespace detail
detail::tvec3<T> const & x, detail::tvec3<T> const & x,
detail::tvec3<T> const & minVal, detail::tvec3<T> const & minVal,
detail::tvec3<T> const & maxVal detail::tvec3<T> const & maxVal
) ) GLM_FUNC_POST
{ {
return detail::tvec3<T>( return detail::tvec3<T>(
clamp(x.x, minVal.x, maxVal.x), clamp(x.x, minVal.x, maxVal.x),
@ -410,7 +410,7 @@ namespace detail
detail::tvec4<T> const & x, detail::tvec4<T> const & x,
detail::tvec4<T> const & minVal, detail::tvec4<T> const & minVal,
detail::tvec4<T> const & maxVal detail::tvec4<T> const & maxVal
) ) GLM_FUNC_POST
{ {
return detail::tvec4<T>( return detail::tvec4<T>(
clamp(x.x, minVal.x, maxVal.x), clamp(x.x, minVal.x, maxVal.x),
@ -426,7 +426,7 @@ namespace detail
genType const & x, genType const & x,
genType const & y, genType const & y,
genType const & a genType const & a
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<genType>::is_float , "'genType' is not floating-point type"); GLM_STATIC_ASSERT(detail::type<genType>::is_float , "'genType' is not floating-point type");
@ -439,7 +439,7 @@ namespace detail
detail::tvec2<valType> const & x, detail::tvec2<valType> const & x,
detail::tvec2<valType> const & y, detail::tvec2<valType> const & y,
valType const & a valType const & a
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<valType>::is_float , "'genType' is not floating-point type"); GLM_STATIC_ASSERT(detail::type<valType>::is_float , "'genType' is not floating-point type");
@ -452,7 +452,7 @@ namespace detail
detail::tvec3<valType> const & x, detail::tvec3<valType> const & x,
detail::tvec3<valType> const & y, detail::tvec3<valType> const & y,
valType const & a valType const & a
) ) GLM_FUNC_POST
{ {
return x + a * (y - x); return x + a * (y - x);
} }
@ -463,7 +463,7 @@ namespace detail
detail::tvec4<valType> const & x, detail::tvec4<valType> const & x,
detail::tvec4<valType> const & y, detail::tvec4<valType> const & y,
valType const & a valType const & a
) ) GLM_FUNC_POST
{ {
return x + a * (y - x); return x + a * (y - x);
} }
@ -474,7 +474,7 @@ namespace detail
detail::tvec2<valType> const & x, detail::tvec2<valType> const & x,
detail::tvec2<valType> const & y, detail::tvec2<valType> const & y,
detail::tvec2<valType> const & a detail::tvec2<valType> const & a
) ) GLM_FUNC_POST
{ {
return x + a * (y - x); return x + a * (y - x);
} }
@ -485,7 +485,7 @@ namespace detail
detail::tvec3<valType> const & x, detail::tvec3<valType> const & x,
detail::tvec3<valType> const & y, detail::tvec3<valType> const & y,
detail::tvec3<valType> const & a detail::tvec3<valType> const & a
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<valType>::is_float , "'genType' is not floating-point type"); GLM_STATIC_ASSERT(detail::type<valType>::is_float , "'genType' is not floating-point type");
@ -498,7 +498,7 @@ namespace detail
detail::tvec4<valType> const & x, detail::tvec4<valType> const & x,
detail::tvec4<valType> const & y, detail::tvec4<valType> const & y,
detail::tvec4<valType> const & a detail::tvec4<valType> const & a
) ) GLM_FUNC_POST
{ {
return x + a * (y - x); return x + a * (y - x);
} }
@ -525,7 +525,7 @@ namespace detail
float const & x, float const & x,
float const & y, float const & y,
bool const & a bool const & a
) ) GLM_FUNC_POST
{ {
return a ? y : x; return a ? y : x;
} }
@ -536,7 +536,7 @@ namespace detail
double const & x, double const & x,
double const & y, double const & y,
bool const & a bool const & a
) ) GLM_FUNC_POST
{ {
return a ? y : x; return a ? y : x;
} }
@ -547,7 +547,7 @@ namespace detail
detail::tvec2<T> const & x, detail::tvec2<T> const & x,
detail::tvec2<T> const & y, detail::tvec2<T> const & y,
bool a bool a
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs");
@ -560,7 +560,7 @@ namespace detail
detail::tvec3<T> const & x, detail::tvec3<T> const & x,
detail::tvec3<T> const & y, detail::tvec3<T> const & y,
bool a bool a
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs");
@ -573,7 +573,7 @@ namespace detail
detail::tvec4<T> const & x, detail::tvec4<T> const & x,
detail::tvec4<T> const & y, detail::tvec4<T> const & y,
bool a bool a
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs");
@ -586,7 +586,7 @@ namespace detail
detail::tvec2<T> const & x, detail::tvec2<T> const & x,
detail::tvec2<T> const & y, detail::tvec2<T> const & y,
typename detail::tvec2<T>::bool_type a typename detail::tvec2<T>::bool_type a
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs");
@ -608,7 +608,7 @@ namespace detail
detail::tvec3<T> const & x, detail::tvec3<T> const & x,
detail::tvec3<T> const & y, detail::tvec3<T> const & y,
typename detail::tvec3<T>::bool_type a typename detail::tvec3<T>::bool_type a
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs");
@ -630,7 +630,7 @@ namespace detail
detail::tvec4<T> const & x, detail::tvec4<T> const & x,
detail::tvec4<T> const & y, detail::tvec4<T> const & y,
typename detail::tvec4<T>::bool_type a typename detail::tvec4<T>::bool_type a
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs");
@ -652,7 +652,7 @@ namespace detail
( (
genType const & edge, genType const & edge,
genType const & x genType const & x
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'step' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'step' only accept floating-point inputs");
@ -664,7 +664,7 @@ namespace detail
( (
typename detail::tvec2<T>::value_type const & edge, typename detail::tvec2<T>::value_type const & edge,
detail::tvec2<T> const & x detail::tvec2<T> const & x
) ) GLM_FUNC_POST
{ {
return detail::tvec2<T>( return detail::tvec2<T>(
x.x < edge ? T(0) : T(1), x.x < edge ? T(0) : T(1),
@ -676,7 +676,7 @@ namespace detail
( (
typename detail::tvec3<T>::value_type const & edge, typename detail::tvec3<T>::value_type const & edge,
detail::tvec3<T> const & x detail::tvec3<T> const & x
) ) GLM_FUNC_POST
{ {
return detail::tvec3<T>( return detail::tvec3<T>(
x.x < edge ? T(0) : T(1), x.x < edge ? T(0) : T(1),
@ -689,7 +689,7 @@ namespace detail
( (
typename detail::tvec4<T>::value_type const & edge, typename detail::tvec4<T>::value_type const & edge,
detail::tvec4<T> const & x detail::tvec4<T> const & x
) ) GLM_FUNC_POST
{ {
return detail::tvec4<T>( return detail::tvec4<T>(
x.x < edge ? T(0) : T(1), x.x < edge ? T(0) : T(1),
@ -703,7 +703,7 @@ namespace detail
( (
detail::tvec2<T> const & edge, detail::tvec2<T> const & edge,
detail::tvec2<T> const & x detail::tvec2<T> const & x
) ) GLM_FUNC_POST
{ {
return detail::tvec2<T>( return detail::tvec2<T>(
x.x < edge.x ? T(0) : T(1), x.x < edge.x ? T(0) : T(1),
@ -715,7 +715,7 @@ namespace detail
( (
detail::tvec3<T> const & edge, detail::tvec3<T> const & edge,
detail::tvec3<T> const & x detail::tvec3<T> const & x
) ) GLM_FUNC_POST
{ {
return detail::tvec3<T>( return detail::tvec3<T>(
x.x < edge.x ? T(0) : T(1), x.x < edge.x ? T(0) : T(1),
@ -728,7 +728,7 @@ namespace detail
( (
detail::tvec4<T> const & edge, detail::tvec4<T> const & edge,
detail::tvec4<T> const & x detail::tvec4<T> const & x
) ) GLM_FUNC_POST
{ {
return detail::tvec4<T>( return detail::tvec4<T>(
x.x < edge.x ? T(0) : T(1), x.x < edge.x ? T(0) : T(1),
@ -744,7 +744,7 @@ namespace detail
genType const & edge0, genType const & edge0,
genType const & edge1, genType const & edge1,
genType const & x genType const & x
) ) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'smoothstep' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'smoothstep' only accept floating-point inputs");
@ -758,7 +758,7 @@ namespace detail
typename detail::tvec2<T>::value_type const & edge0, typename detail::tvec2<T>::value_type const & edge0,
typename detail::tvec2<T>::value_type const & edge1, typename detail::tvec2<T>::value_type const & edge1,
detail::tvec2<T> const & x detail::tvec2<T> const & x
) ) GLM_FUNC_POST
{ {
return detail::tvec2<T>( return detail::tvec2<T>(
smoothstep(edge0, edge1, x.x), smoothstep(edge0, edge1, x.x),
@ -771,7 +771,7 @@ namespace detail
typename detail::tvec3<T>::value_type const & edge0, typename detail::tvec3<T>::value_type const & edge0,
typename detail::tvec3<T>::value_type const & edge1, typename detail::tvec3<T>::value_type const & edge1,
detail::tvec3<T> const & x detail::tvec3<T> const & x
) ) GLM_FUNC_POST
{ {
return detail::tvec3<T>( return detail::tvec3<T>(
smoothstep(edge0, edge1, x.x), smoothstep(edge0, edge1, x.x),
@ -785,7 +785,7 @@ namespace detail
typename detail::tvec4<T>::value_type const & edge0, typename detail::tvec4<T>::value_type const & edge0,
typename detail::tvec4<T>::value_type const & edge1, typename detail::tvec4<T>::value_type const & edge1,
detail::tvec4<T> const & x detail::tvec4<T> const & x
) ) GLM_FUNC_POST
{ {
return detail::tvec4<T>( return detail::tvec4<T>(
smoothstep(edge0, edge1, x.x), smoothstep(edge0, edge1, x.x),
@ -800,7 +800,7 @@ namespace detail
detail::tvec2<T> const & edge0, detail::tvec2<T> const & edge0,
detail::tvec2<T> const & edge1, detail::tvec2<T> const & edge1,
detail::tvec2<T> const & x detail::tvec2<T> const & x
) ) GLM_FUNC_POST
{ {
return detail::tvec2<T>( return detail::tvec2<T>(
smoothstep(edge0.x, edge1.x, x.x), smoothstep(edge0.x, edge1.x, x.x),
@ -813,7 +813,7 @@ namespace detail
detail::tvec3<T> const & edge0, detail::tvec3<T> const & edge0,
detail::tvec3<T> const & edge1, detail::tvec3<T> const & edge1,
detail::tvec3<T> const & x detail::tvec3<T> const & x
) ) GLM_FUNC_POST
{ {
return detail::tvec3<T>( return detail::tvec3<T>(
smoothstep(edge0.x, edge1.x, x.x), smoothstep(edge0.x, edge1.x, x.x),
@ -827,7 +827,7 @@ namespace detail
detail::tvec4<T> const & edge0, detail::tvec4<T> const & edge0,
detail::tvec4<T> const & edge1, detail::tvec4<T> const & edge1,
detail::tvec4<T> const & x detail::tvec4<T> const & x
) ) GLM_FUNC_POST
{ {
return detail::tvec4<T>( return detail::tvec4<T>(
smoothstep(edge0.x, edge1.x, x.x), smoothstep(edge0.x, edge1.x, x.x),
@ -838,7 +838,7 @@ namespace detail
// TODO: Not working on MinGW... // TODO: Not working on MinGW...
template <typename genType> template <typename genType>
GLM_FUNC_QUALIFIER bool isnan(genType const & x) GLM_FUNC_QUALIFIER bool isnan(genType const & x) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'isnan' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'isnan' only accept floating-point inputs");
@ -861,7 +861,7 @@ namespace detail
GLM_FUNC_QUALIFIER typename detail::tvec2<T>::bool_type isnan GLM_FUNC_QUALIFIER typename detail::tvec2<T>::bool_type isnan
( (
detail::tvec2<T> const & x detail::tvec2<T> const & x
) ) GLM_FUNC_POST
{ {
return typename detail::tvec2<T>::bool_type( return typename detail::tvec2<T>::bool_type(
isnan(x.x), isnan(x.x),
@ -872,7 +872,7 @@ namespace detail
GLM_FUNC_QUALIFIER typename detail::tvec3<T>::bool_type isnan GLM_FUNC_QUALIFIER typename detail::tvec3<T>::bool_type isnan
( (
detail::tvec3<T> const & x detail::tvec3<T> const & x
) ) GLM_FUNC_POST
{ {
return typename detail::tvec3<T>::bool_type( return typename detail::tvec3<T>::bool_type(
isnan(x.x), isnan(x.x),
@ -884,7 +884,7 @@ namespace detail
GLM_FUNC_QUALIFIER typename detail::tvec4<T>::bool_type isnan GLM_FUNC_QUALIFIER typename detail::tvec4<T>::bool_type isnan
( (
detail::tvec4<T> const & x detail::tvec4<T> const & x
) ) GLM_FUNC_POST
{ {
return typename detail::tvec4<T>::bool_type( return typename detail::tvec4<T>::bool_type(
isnan(x.x), isnan(x.x),
@ -894,8 +894,10 @@ namespace detail
} }
template <typename genType> template <typename genType>
GLM_FUNC_QUALIFIER bool isinf( GLM_FUNC_QUALIFIER bool isinf
genType const & x) (
genType const & x
) GLM_FUNC_POST
{ {
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'isinf' only accept floating-point inputs"); GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'isinf' only accept floating-point inputs");
@ -919,7 +921,7 @@ namespace detail
GLM_FUNC_QUALIFIER typename detail::tvec2<T>::bool_type isinf GLM_FUNC_QUALIFIER typename detail::tvec2<T>::bool_type isinf
( (
detail::tvec2<T> const & x detail::tvec2<T> const & x
) ) GLM_FUNC_POST
{ {
return typename detail::tvec2<T>::bool_type( return typename detail::tvec2<T>::bool_type(
isinf(x.x), isinf(x.x),
@ -930,7 +932,7 @@ namespace detail
GLM_FUNC_QUALIFIER typename detail::tvec3<T>::bool_type isinf GLM_FUNC_QUALIFIER typename detail::tvec3<T>::bool_type isinf
( (
detail::tvec3<T> const & x detail::tvec3<T> const & x
) ) GLM_FUNC_POST
{ {
return typename detail::tvec3<T>::bool_type( return typename detail::tvec3<T>::bool_type(
isinf(x.x), isinf(x.x),
@ -942,7 +944,7 @@ namespace detail
GLM_FUNC_QUALIFIER typename detail::tvec4<T>::bool_type isinf GLM_FUNC_QUALIFIER typename detail::tvec4<T>::bool_type isinf
( (
detail::tvec4<T> const & x detail::tvec4<T> const & x
) ) GLM_FUNC_POST
{ {
return typename detail::tvec4<T>::bool_type( return typename detail::tvec4<T>::bool_type(
isinf(x.x), isinf(x.x),
@ -951,7 +953,7 @@ namespace detail
isinf(x.w)); isinf(x.w));
} }
GLM_FUNC_QUALIFIER int floatBitsToInt(float const & value) GLM_FUNC_QUALIFIER int floatBitsToInt(float const & value) GLM_FUNC_POST
{ {
union union
{ {
@ -966,7 +968,7 @@ namespace detail
GLM_FUNC_QUALIFIER detail::tvec2<int> floatBitsToInt GLM_FUNC_QUALIFIER detail::tvec2<int> floatBitsToInt
( (
detail::tvec2<float> const & value detail::tvec2<float> const & value
) ) GLM_FUNC_POST
{ {
return detail::tvec2<int>( return detail::tvec2<int>(
floatBitsToInt(value.x), floatBitsToInt(value.x),
@ -976,7 +978,7 @@ namespace detail
GLM_FUNC_QUALIFIER detail::tvec3<int> floatBitsToInt GLM_FUNC_QUALIFIER detail::tvec3<int> floatBitsToInt
( (
detail::tvec3<float> const & value detail::tvec3<float> const & value
) ) GLM_FUNC_POST
{ {
return detail::tvec3<int>( return detail::tvec3<int>(
floatBitsToInt(value.x), floatBitsToInt(value.x),
@ -987,7 +989,7 @@ namespace detail
GLM_FUNC_QUALIFIER detail::tvec4<int> floatBitsToInt GLM_FUNC_QUALIFIER detail::tvec4<int> floatBitsToInt
( (
detail::tvec4<float> const & value detail::tvec4<float> const & value
) ) GLM_FUNC_POST
{ {
return detail::tvec4<int>( return detail::tvec4<int>(
floatBitsToInt(value.x), floatBitsToInt(value.x),
@ -996,7 +998,7 @@ namespace detail
floatBitsToInt(value.w)); floatBitsToInt(value.w));
} }
GLM_FUNC_QUALIFIER uint floatBitsToUint(float const & value) GLM_FUNC_QUALIFIER uint floatBitsToUint(float const & value) GLM_FUNC_POST
{ {
union union
{ {
@ -1011,7 +1013,7 @@ namespace detail
GLM_FUNC_QUALIFIER detail::tvec2<uint> floatBitsToUint GLM_FUNC_QUALIFIER detail::tvec2<uint> floatBitsToUint
( (
detail::tvec2<float> const & value detail::tvec2<float> const & value
) ) GLM_FUNC_POST
{ {
return detail::tvec2<uint>( return detail::tvec2<uint>(
floatBitsToUint(value.x), floatBitsToUint(value.x),
@ -1021,7 +1023,7 @@ namespace detail
GLM_FUNC_QUALIFIER detail::tvec3<uint> floatBitsToUint GLM_FUNC_QUALIFIER detail::tvec3<uint> floatBitsToUint
( (
detail::tvec3<float> const & value detail::tvec3<float> const & value
) ) GLM_FUNC_POST
{ {
return detail::tvec3<uint>( return detail::tvec3<uint>(
floatBitsToUint(value.x), floatBitsToUint(value.x),
@ -1032,7 +1034,7 @@ namespace detail
GLM_FUNC_QUALIFIER detail::tvec4<uint> floatBitsToUint GLM_FUNC_QUALIFIER detail::tvec4<uint> floatBitsToUint
( (
detail::tvec4<float> const & value detail::tvec4<float> const & value
) ) GLM_FUNC_POST
{ {
return detail::tvec4<uint>( return detail::tvec4<uint>(
floatBitsToUint(value.x), floatBitsToUint(value.x),
@ -1054,10 +1056,9 @@ namespace detail
} }
GLM_FUNC_QUALIFIER detail::tvec2<float> intBitsToFloat GLM_FUNC_QUALIFIER detail::tvec2<float> intBitsToFloat
( (
detail::tvec2<int> const & value detail::tvec2<int> const & value
) ) GLM_FUNC_POST
{ {
return detail::tvec2<float>( return detail::tvec2<float>(
intBitsToFloat(value.x), intBitsToFloat(value.x),
@ -1067,7 +1068,7 @@ namespace detail
GLM_FUNC_QUALIFIER detail::tvec3<float> intBitsToFloat GLM_FUNC_QUALIFIER detail::tvec3<float> intBitsToFloat
( (
detail::tvec3<int> const & value detail::tvec3<int> const & value
) ) GLM_FUNC_POST
{ {
return detail::tvec3<float>( return detail::tvec3<float>(
intBitsToFloat(value.x), intBitsToFloat(value.x),
@ -1078,7 +1079,7 @@ namespace detail
GLM_FUNC_QUALIFIER detail::tvec4<float> intBitsToFloat GLM_FUNC_QUALIFIER detail::tvec4<float> intBitsToFloat
( (
detail::tvec4<int> const & value detail::tvec4<int> const & value
) ) GLM_FUNC_POST
{ {
return detail::tvec4<float>( return detail::tvec4<float>(
intBitsToFloat(value.x), intBitsToFloat(value.x),
@ -1087,7 +1088,7 @@ namespace detail
intBitsToFloat(value.w)); intBitsToFloat(value.w));
} }
GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const & value) GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const & value) GLM_FUNC_POST
{ {
union union
{ {
@ -1102,7 +1103,7 @@ namespace detail
GLM_FUNC_QUALIFIER detail::tvec2<float> uintBitsToFloat GLM_FUNC_QUALIFIER detail::tvec2<float> uintBitsToFloat
( (
detail::tvec2<uint> const & value detail::tvec2<uint> const & value
) ) GLM_FUNC_POST
{ {
return detail::tvec2<float>( return detail::tvec2<float>(
uintBitsToFloat(value.x), uintBitsToFloat(value.x),
@ -1112,7 +1113,7 @@ namespace detail
GLM_FUNC_QUALIFIER detail::tvec3<float> uintBitsToFloat GLM_FUNC_QUALIFIER detail::tvec3<float> uintBitsToFloat
( (
detail::tvec3<uint> const & value detail::tvec3<uint> const & value
) ) GLM_FUNC_POST
{ {
return detail::tvec3<float>( return detail::tvec3<float>(
uintBitsToFloat(value.x), uintBitsToFloat(value.x),
@ -1123,7 +1124,7 @@ namespace detail
GLM_FUNC_QUALIFIER detail::tvec4<float> uintBitsToFloat GLM_FUNC_QUALIFIER detail::tvec4<float> uintBitsToFloat
( (
detail::tvec4<uint> const & value detail::tvec4<uint> const & value
) ) GLM_FUNC_POST
{ {
return detail::tvec4<float>( return detail::tvec4<float>(
uintBitsToFloat(value.x), uintBitsToFloat(value.x),
@ -1138,7 +1139,7 @@ namespace detail
genType const & a, genType const & a,
genType const & b, genType const & b,
genType const & c genType const & c
) ) GLM_FUNC_POST
{ {
return a * b + c; return a * b + c;
} }
@ -1148,7 +1149,7 @@ namespace detail
( (
genType const & x, genType const & x,
int & exp int & exp
) ) GLM_FUNC_POST
{ {
return std::frexp(x, exp); return std::frexp(x, exp);
} }
@ -1158,7 +1159,7 @@ namespace detail
( (
detail::tvec2<T> const & x, detail::tvec2<T> const & x,
detail::tvec2<int> & exp detail::tvec2<int> & exp
) ) GLM_FUNC_POST
{ {
return std::frexp(x, exp); return std::frexp(x, exp);
} }
@ -1168,7 +1169,7 @@ namespace detail
( (
detail::tvec3<T> const & x, detail::tvec3<T> const & x,
detail::tvec3<int> & exp detail::tvec3<int> & exp
) ) GLM_FUNC_POST
{ {
return std::frexp(x, exp); return std::frexp(x, exp);
} }
@ -1178,7 +1179,7 @@ namespace detail
( (
detail::tvec4<T> const & x, detail::tvec4<T> const & x,
detail::tvec4<int> & exp detail::tvec4<int> & exp
) ) GLM_FUNC_POST
{ {
return std::frexp(x, exp); return std::frexp(x, exp);
} }
@ -1188,7 +1189,7 @@ namespace detail
( (
genType const & x, genType const & x,
int const & exp int const & exp
) ) GLM_FUNC_POST
{ {
return std::frexp(x, exp); return std::frexp(x, exp);
} }
@ -1198,7 +1199,7 @@ namespace detail
( (
detail::tvec2<T> const & x, detail::tvec2<T> const & x,
detail::tvec2<int> const & exp detail::tvec2<int> const & exp
) ) GLM_FUNC_POST
{ {
return std::frexp(x, exp); return std::frexp(x, exp);
} }
@ -1208,7 +1209,7 @@ namespace detail
( (
detail::tvec3<T> const & x, detail::tvec3<T> const & x,
detail::tvec3<int> const & exp detail::tvec3<int> const & exp
) ) GLM_FUNC_POST
{ {
return std::frexp(x, exp); return std::frexp(x, exp);
} }
@ -1218,9 +1219,8 @@ namespace detail
( (
detail::tvec4<T> const & x, detail::tvec4<T> const & x,
detail::tvec4<int> const & exp detail::tvec4<int> const & exp
) ) GLM_FUNC_POST
{ {
return std::frexp(x, exp); return std::frexp(x, exp);
} }
}//namespace glm }//namespace glm

View File

@ -709,6 +709,11 @@
#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL #define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL
#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE #define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE
#ifdef _AMP_H
# define GLM_FUNC_POST restrict(amp, cpu)
#else
# define GLM_FUNC_POST
#endif//_AMP_H
/////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////
// Swizzle operators // Swizzle operators

View File

@ -37,79 +37,79 @@ namespace detail
{ {
typedef short hdata; typedef short hdata;
GLM_FUNC_DECL float toFloat32(hdata value); GLM_FUNC_DECL float toFloat32(hdata value) GLM_FUNC_POST;
GLM_FUNC_DECL hdata toFloat16(float const & value); GLM_FUNC_DECL hdata toFloat16(float const & value) GLM_FUNC_POST;
class half class half
{ {
public: public:
// Constructors // Constructors
GLM_FUNC_DECL half(); GLM_FUNC_DECL half() GLM_FUNC_POST;
GLM_FUNC_DECL half(half const & s); GLM_FUNC_DECL half(half const & s) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL explicit half(U const & s); GLM_FUNC_DECL explicit half(U const & s) GLM_FUNC_POST;
// Cast // Cast
//template <typename U> //template <typename U>
//GLM_FUNC_DECL operator U() const; //GLM_FUNC_DECL operator U() const;
GLM_FUNC_DECL operator float() const; GLM_FUNC_DECL operator float() const GLM_FUNC_POST;
// Unary updatable operators // Unary updatable operators
GLM_FUNC_DECL half& operator= (half const & s); GLM_FUNC_DECL half& operator= (half const & s) GLM_FUNC_POST;
GLM_FUNC_DECL half& operator+=(half const & s); GLM_FUNC_DECL half& operator+=(half const & s) GLM_FUNC_POST;
GLM_FUNC_DECL half& operator-=(half const & s); GLM_FUNC_DECL half& operator-=(half const & s) GLM_FUNC_POST;
GLM_FUNC_DECL half& operator*=(half const & s); GLM_FUNC_DECL half& operator*=(half const & s) GLM_FUNC_POST;
GLM_FUNC_DECL half& operator/=(half const & s); GLM_FUNC_DECL half& operator/=(half const & s) GLM_FUNC_POST;
GLM_FUNC_DECL half& operator++(); GLM_FUNC_DECL half& operator++() GLM_FUNC_POST;
GLM_FUNC_DECL half& operator--(); GLM_FUNC_DECL half& operator--() GLM_FUNC_POST;
GLM_FUNC_DECL float toFloat() const{return toFloat32(data);} GLM_FUNC_DECL float toFloat() const GLM_FUNC_POST {return toFloat32(data);}
GLM_FUNC_DECL hdata _data() const{return data;} GLM_FUNC_DECL hdata _data() const GLM_FUNC_POST {return data;}
private: private:
hdata data; hdata data;
}; };
GLM_FUNC_DECL half operator+ (half const & s1, half const & s2); GLM_FUNC_DECL half operator+ (half const & s1, half const & s2) GLM_FUNC_POST;
GLM_FUNC_DECL half operator- (half const & s1, half const & s2); GLM_FUNC_DECL half operator- (half const & s1, half const & s2) GLM_FUNC_POST;
GLM_FUNC_DECL half operator* (half const & s1, half const & s2); GLM_FUNC_DECL half operator* (half const & s1, half const & s2) GLM_FUNC_POST;
GLM_FUNC_DECL half operator/ (half const & s1, half const & s2); GLM_FUNC_DECL half operator/ (half const & s1, half const & s2) GLM_FUNC_POST;
// Unary constant operators // Unary constant operators
GLM_FUNC_DECL half operator- (half const & s); GLM_FUNC_DECL half operator- (half const & s) GLM_FUNC_POST;
GLM_FUNC_DECL half operator-- (half const & s, int); GLM_FUNC_DECL half operator-- (half const & s, int) GLM_FUNC_POST;
GLM_FUNC_DECL half operator++ (half const & s, int); GLM_FUNC_DECL half operator++ (half const & s, int) GLM_FUNC_POST;
GLM_FUNC_DECL bool operator==( GLM_FUNC_DECL bool operator==(
detail::half const & x, detail::half const & x,
detail::half const & y); detail::half const & y) GLM_FUNC_POST;
GLM_FUNC_DECL bool operator!=( GLM_FUNC_DECL bool operator!=(
detail::half const & x, detail::half const & x,
detail::half const & y); detail::half const & y) GLM_FUNC_POST;
GLM_FUNC_DECL bool operator<( GLM_FUNC_DECL bool operator<(
detail::half const & x, detail::half const & x,
detail::half const & y); detail::half const & y) GLM_FUNC_POST;
GLM_FUNC_DECL bool operator<=( GLM_FUNC_DECL bool operator<=(
detail::half const & x, detail::half const & x,
detail::half const & y); detail::half const & y) GLM_FUNC_POST;
GLM_FUNC_DECL bool operator>( GLM_FUNC_DECL bool operator>(
detail::half const & x, detail::half const & x,
detail::half const & y); detail::half const & y) GLM_FUNC_POST;
GLM_FUNC_DECL bool operator>=( GLM_FUNC_DECL bool operator>=(
detail::half const & x, detail::half const & x,
detail::half const & y); detail::half const & y) GLM_FUNC_POST;
}//namespace detail }//namespace detail
}//namespace glm }//namespace glm

View File

@ -33,9 +33,13 @@
namespace glm{ namespace glm{
namespace detail namespace detail
{ {
GLM_FUNC_QUALIFIER float overflow() GLM_FUNC_QUALIFIER float overflow() GLM_FUNC_POST
{ {
# ifdef _AMP_H
float f = 1e10;
# else
volatile float f = 1e10; volatile float f = 1e10;
# endif
for(int i = 0; i < 10; ++i) for(int i = 0; i < 10; ++i)
f *= f; // this will overflow before f *= f; // this will overflow before
@ -43,7 +47,7 @@ namespace detail
return f; return f;
} }
GLM_FUNC_QUALIFIER float toFloat32(hdata value) GLM_FUNC_QUALIFIER float toFloat32(hdata value) GLM_FUNC_POST
{ {
int s = (value >> 15) & 0x00000001; int s = (value >> 15) & 0x00000001;
int e = (value >> 10) & 0x0000001f; int e = (value >> 10) & 0x0000001f;
@ -117,7 +121,7 @@ namespace detail
return Result.f; return Result.f;
} }
GLM_FUNC_QUALIFIER hdata toFloat16(float const & f) GLM_FUNC_QUALIFIER hdata toFloat16(float const & f) GLM_FUNC_POST
{ {
uif Entry; uif Entry;
Entry.f = f; Entry.f = f;
@ -252,16 +256,16 @@ namespace detail
} }
} }
GLM_FUNC_QUALIFIER half::half() : GLM_FUNC_QUALIFIER half::half() GLM_FUNC_POST :
data(0) data(0)
{} {}
GLM_FUNC_QUALIFIER half::half(half const & s) : GLM_FUNC_QUALIFIER half::half(half const & s) GLM_FUNC_POST :
data(s.data) data(s.data)
{} {}
template <typename U> template <typename U>
GLM_FUNC_QUALIFIER half::half(U const & s) : GLM_FUNC_QUALIFIER half::half(U const & s) GLM_FUNC_POST :
data(toFloat16(float(s))) data(toFloat16(float(s)))
{} {}
/* /*
@ -272,50 +276,50 @@ namespace detail
} }
*/ */
GLM_FUNC_QUALIFIER half::operator float() const GLM_FUNC_QUALIFIER half::operator float() const GLM_FUNC_POST
{ {
return toFloat32(this->data); return toFloat32(this->data);
} }
// Unary updatable operators // Unary updatable operators
GLM_FUNC_QUALIFIER half& half::operator= (half const & s) GLM_FUNC_QUALIFIER half& half::operator= (half const & s) GLM_FUNC_POST
{ {
data = s.data; data = s.data;
return *this; return *this;
} }
GLM_FUNC_QUALIFIER half& half::operator+=(half const & s) GLM_FUNC_QUALIFIER half& half::operator+=(half const & s) GLM_FUNC_POST
{ {
data = toFloat16(toFloat32(data) + toFloat32(s.data)); data = toFloat16(toFloat32(data) + toFloat32(s.data));
return *this; return *this;
} }
GLM_FUNC_QUALIFIER half& half::operator-=(half const & s) GLM_FUNC_QUALIFIER half& half::operator-=(half const & s) GLM_FUNC_POST
{ {
data = toFloat16(toFloat32(data) - toFloat32(s.data)); data = toFloat16(toFloat32(data) - toFloat32(s.data));
return *this; return *this;
} }
GLM_FUNC_QUALIFIER half& half::operator*=(half const & s) GLM_FUNC_QUALIFIER half& half::operator*=(half const & s) GLM_FUNC_POST
{ {
data = toFloat16(toFloat32(data) * toFloat32(s.data)); data = toFloat16(toFloat32(data) * toFloat32(s.data));
return *this; return *this;
} }
GLM_FUNC_QUALIFIER half& half::operator/=(half const & s) GLM_FUNC_QUALIFIER half& half::operator/=(half const & s) GLM_FUNC_POST
{ {
data = toFloat16(toFloat32(data) / toFloat32(s.data)); data = toFloat16(toFloat32(data) / toFloat32(s.data));
return *this; return *this;
} }
GLM_FUNC_QUALIFIER half& half::operator++() GLM_FUNC_QUALIFIER half& half::operator++() GLM_FUNC_POST
{ {
float Casted = toFloat32(data); float Casted = toFloat32(data);
this->data = toFloat16(++Casted); this->data = toFloat16(++Casted);
return *this; return *this;
} }
GLM_FUNC_QUALIFIER half& half::operator--() GLM_FUNC_QUALIFIER half& half::operator--() GLM_FUNC_POST
{ {
float Casted = toFloat32(data); float Casted = toFloat32(data);
this->data = toFloat16(--Casted); this->data = toFloat16(--Casted);
@ -325,38 +329,38 @@ namespace detail
////////////////////////////////////// //////////////////////////////////////
// Binary arithmetic operators // Binary arithmetic operators
GLM_FUNC_QUALIFIER detail::half operator+ (detail::half const & s1, detail::half const & s2) GLM_FUNC_QUALIFIER detail::half operator+ (detail::half const & s1, detail::half const & s2) GLM_FUNC_POST
{ {
return detail::half(float(s1) + float(s2)); return detail::half(float(s1) + float(s2));
} }
GLM_FUNC_QUALIFIER detail::half operator- (detail::half const & s1, detail::half const & s2) GLM_FUNC_QUALIFIER detail::half operator- (detail::half const & s1, detail::half const & s2) GLM_FUNC_POST
{ {
return detail::half(float(s1) - float(s2)); return detail::half(float(s1) - float(s2));
} }
GLM_FUNC_QUALIFIER detail::half operator* (detail::half const & s1, detail::half const & s2) GLM_FUNC_QUALIFIER detail::half operator* (detail::half const & s1, detail::half const & s2) GLM_FUNC_POST
{ {
return detail::half(float(s1) * float(s2)); return detail::half(float(s1) * float(s2));
} }
GLM_FUNC_QUALIFIER detail::half operator/ (detail::half const & s1, detail::half const & s2) GLM_FUNC_QUALIFIER detail::half operator/ (detail::half const & s1, detail::half const & s2) GLM_FUNC_POST
{ {
return detail::half(float(s1) / float(s2)); return detail::half(float(s1) / float(s2));
} }
// Unary constant operators // Unary constant operators
GLM_FUNC_QUALIFIER detail::half operator- (detail::half const & s) GLM_FUNC_QUALIFIER detail::half operator- (detail::half const & s) GLM_FUNC_POST
{ {
return detail::half(-float(s)); return detail::half(-float(s));
} }
GLM_FUNC_QUALIFIER detail::half operator-- (detail::half const & s, int) GLM_FUNC_QUALIFIER detail::half operator-- (detail::half const & s, int) GLM_FUNC_POST
{ {
return detail::half(float(s) - 1.0f); return detail::half(float(s) - 1.0f);
} }
GLM_FUNC_QUALIFIER detail::half operator++ (detail::half const & s, int) GLM_FUNC_QUALIFIER detail::half operator++ (detail::half const & s, int) GLM_FUNC_POST
{ {
return detail::half(float(s) + 1.0f); return detail::half(float(s) + 1.0f);
} }
@ -365,7 +369,7 @@ namespace detail
( (
detail::half const & x, detail::half const & x,
detail::half const & y detail::half const & y
) ) GLM_FUNC_POST
{ {
return x._data() == y._data(); return x._data() == y._data();
} }
@ -374,7 +378,7 @@ namespace detail
( (
detail::half const & x, detail::half const & x,
detail::half const & y detail::half const & y
) ) GLM_FUNC_POST
{ {
return x._data() != y._data(); return x._data() != y._data();
} }
@ -383,7 +387,7 @@ namespace detail
( (
detail::half const & x, detail::half const & x,
detail::half const & y detail::half const & y
) ) GLM_FUNC_POST
{ {
return float(x) < float(y); return float(x) < float(y);
} }
@ -392,7 +396,7 @@ namespace detail
( (
detail::half const & x, detail::half const & x,
detail::half const & y detail::half const & y
) ) GLM_FUNC_POST
{ {
return float(x) <= float(y); return float(x) <= float(y);
} }
@ -401,7 +405,7 @@ namespace detail
( (
detail::half const & x, detail::half const & x,
detail::half const & y detail::half const & y
) ) GLM_FUNC_POST
{ {
return float(x) > float(y); return float(x) > float(y);
} }
@ -410,7 +414,7 @@ namespace detail
( (
detail::half const & x, detail::half const & x,
detail::half const & y detail::half const & y
) ) GLM_FUNC_POST
{ {
return float(x) >= float(y); return float(x) >= float(y);
} }

View File

@ -54,7 +54,7 @@ namespace detail
typedef tvec3<T> type; typedef tvec3<T> type;
typedef tvec3<bool> bool_type; typedef tvec3<bool> bool_type;
GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const; GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const GLM_FUNC_POST;
////////////////////////////////////// //////////////////////////////////////
// Data // Data
@ -101,26 +101,26 @@ namespace detail
////////////////////////////////////// //////////////////////////////////////
// Accesses // Accesses
GLM_FUNC_DECL value_type & operator[](size_type i); GLM_FUNC_DECL value_type & operator[](size_type i) GLM_FUNC_POST;
GLM_FUNC_DECL value_type const & operator[](size_type i) const; GLM_FUNC_DECL value_type const & operator[](size_type i) const GLM_FUNC_POST;
////////////////////////////////////// //////////////////////////////////////
// Implicit basic constructors // Implicit basic constructors
GLM_FUNC_DECL tvec3(); GLM_FUNC_DECL tvec3() GLM_FUNC_POST;
GLM_FUNC_DECL tvec3(tvec3<T> const & v); GLM_FUNC_DECL tvec3(tvec3<T> const & v) GLM_FUNC_POST;
////////////////////////////////////// //////////////////////////////////////
// Explicit basic constructors // Explicit basic constructors
GLM_FUNC_DECL explicit tvec3( GLM_FUNC_DECL explicit tvec3(
ctor); ctor) GLM_FUNC_POST;
GLM_FUNC_DECL explicit tvec3( GLM_FUNC_DECL explicit tvec3(
value_type const & s); value_type const & s) GLM_FUNC_POST;
GLM_FUNC_DECL explicit tvec3( GLM_FUNC_DECL explicit tvec3(
value_type const & s1, value_type const & s1,
value_type const & s2, value_type const & s2,
value_type const & s3); value_type const & s3) GLM_FUNC_POST;
////////////////////////////////////// //////////////////////////////////////
// Convertion scalar constructors // Convertion scalar constructors
@ -128,55 +128,55 @@ namespace detail
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
template <typename U> template <typename U>
GLM_FUNC_DECL explicit tvec3( GLM_FUNC_DECL explicit tvec3(
U const & x); U const & x) GLM_FUNC_POST;
//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
template <typename U, typename V, typename W> template <typename U, typename V, typename W>
GLM_FUNC_DECL explicit tvec3( GLM_FUNC_DECL explicit tvec3(
U const & x, U const & x,
V const & y, V const & y,
W const & z); W const & z) GLM_FUNC_POST;
////////////////////////////////////// //////////////////////////////////////
// Convertion vector constructors // Convertion vector constructors
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
template <typename A, typename B> template <typename A, typename B>
GLM_FUNC_DECL explicit tvec3(tvec2<A> const & v, B const & s); GLM_FUNC_DECL explicit tvec3(tvec2<A> const & v, B const & s) GLM_FUNC_POST;
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
template <typename A, typename B> template <typename A, typename B>
GLM_FUNC_DECL explicit tvec3(A const & s, tvec2<B> const & v); GLM_FUNC_DECL explicit tvec3(A const & s, tvec2<B> const & v) GLM_FUNC_POST;
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
template <typename U> template <typename U>
GLM_FUNC_DECL explicit tvec3(tvec3<U> const & v); GLM_FUNC_DECL explicit tvec3(tvec3<U> const & v) GLM_FUNC_POST;
//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
template <typename U> template <typename U>
GLM_FUNC_DECL explicit tvec3(tvec4<U> const & v); GLM_FUNC_DECL explicit tvec3(tvec4<U> const & v) GLM_FUNC_POST;
////////////////////////////////////// //////////////////////////////////////
// Swizzle constructors // Swizzle constructors
GLM_FUNC_DECL tvec3(tref3<T> const & r); GLM_FUNC_DECL tvec3(tref3<T> const & r) GLM_FUNC_POST;
template <typename A, typename B> template <typename A, typename B>
GLM_FUNC_DECL explicit tvec3(tref2<A> const & v, B const & s); GLM_FUNC_DECL explicit tvec3(tref2<A> const & v, B const & s) GLM_FUNC_POST;
template <typename A, typename B> template <typename A, typename B>
GLM_FUNC_DECL explicit tvec3(A const & s, tref2<B> const & v); GLM_FUNC_DECL explicit tvec3(A const & s, tref2<B> const & v) GLM_FUNC_POST;
template <int E0, int E1, int E2> template <int E0, int E1, int E2>
GLM_FUNC_DECL tvec3(glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & that) GLM_FUNC_DECL tvec3(glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & that) GLM_FUNC_POST
{ {
*this = that(); *this = that();
} }
template <int E0, int E1> template <int E0, int E1>
GLM_FUNC_DECL tvec3(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & s) GLM_FUNC_DECL tvec3(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & s) GLM_FUNC_POST
{ {
*this = tvec3<T>(v(), s); *this = tvec3<T>(v(), s);
} }
template <int E0, int E1> template <int E0, int E1>
GLM_FUNC_DECL tvec3(T const & s, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v) GLM_FUNC_DECL tvec3(T const & s, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v) GLM_FUNC_POST
{ {
*this = tvec3<T>(s, v()); *this = tvec3<T>(s, v());
} }
@ -184,79 +184,79 @@ namespace detail
////////////////////////////////////// //////////////////////////////////////
// Unary arithmetic operators // Unary arithmetic operators
GLM_FUNC_DECL tvec3<T> & operator= (tvec3<T> const & v); GLM_FUNC_DECL tvec3<T> & operator= (tvec3<T> const & v) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator= (tvec3<U> const & v); GLM_FUNC_DECL tvec3<T> & operator= (tvec3<U> const & v) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator+=(U const & s); GLM_FUNC_DECL tvec3<T> & operator+=(U const & s) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator+=(tvec3<U> const & v); GLM_FUNC_DECL tvec3<T> & operator+=(tvec3<U> const & v) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator-=(U const & s); GLM_FUNC_DECL tvec3<T> & operator-=(U const & s) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator-=(tvec3<U> const & v); GLM_FUNC_DECL tvec3<T> & operator-=(tvec3<U> const & v) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator*=(U const & s); GLM_FUNC_DECL tvec3<T> & operator*=(U const & s) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator*=(tvec3<U> const & v); GLM_FUNC_DECL tvec3<T> & operator*=(tvec3<U> const & v) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator/=(U const & s); GLM_FUNC_DECL tvec3<T> & operator/=(U const & s) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator/=(tvec3<U> const & v); GLM_FUNC_DECL tvec3<T> & operator/=(tvec3<U> const & v) GLM_FUNC_POST;
GLM_FUNC_DECL tvec3<T> & operator++(); GLM_FUNC_DECL tvec3<T> & operator++() GLM_FUNC_POST;
GLM_FUNC_DECL tvec3<T> & operator--(); GLM_FUNC_DECL tvec3<T> & operator--() GLM_FUNC_POST;
////////////////////////////////////// //////////////////////////////////////
// Unary bit operators // Unary bit operators
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator%= (U const & s); GLM_FUNC_DECL tvec3<T> & operator%= (U const & s) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator%= (tvec3<U> const & v); GLM_FUNC_DECL tvec3<T> & operator%= (tvec3<U> const & v) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator&= (U const & s); GLM_FUNC_DECL tvec3<T> & operator&= (U const & s) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator&= (tvec3<U> const & v); GLM_FUNC_DECL tvec3<T> & operator&= (tvec3<U> const & v) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator|= (U const & s); GLM_FUNC_DECL tvec3<T> & operator|= (U const & s) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator|= (tvec3<U> const & v); GLM_FUNC_DECL tvec3<T> & operator|= (tvec3<U> const & v) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator^= (U const & s); GLM_FUNC_DECL tvec3<T> & operator^= (U const & s) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator^= (tvec3<U> const & v); GLM_FUNC_DECL tvec3<T> & operator^= (tvec3<U> const & v) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator<<=(U const & s); GLM_FUNC_DECL tvec3<T> & operator<<=(U const & s) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator<<=(tvec3<U> const & v); GLM_FUNC_DECL tvec3<T> & operator<<=(tvec3<U> const & v) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator>>=(U const & s); GLM_FUNC_DECL tvec3<T> & operator>>=(U const & s) GLM_FUNC_POST;
template <typename U> template <typename U>
GLM_FUNC_DECL tvec3<T> & operator>>=(tvec3<U> const & v); GLM_FUNC_DECL tvec3<T> & operator>>=(tvec3<U> const & v) GLM_FUNC_POST;
////////////////////////////////////// //////////////////////////////////////
// Swizzle operators // Swizzle operators
GLM_FUNC_DECL value_type swizzle(comp X) const; GLM_FUNC_DECL value_type swizzle(comp X) const GLM_FUNC_POST;
GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const; GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const GLM_FUNC_POST;
GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const; GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const GLM_FUNC_POST;
GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const; GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const GLM_FUNC_POST;
GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y); GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y) GLM_FUNC_POST;
GLM_FUNC_DECL tref3<T> swizzle(comp X, comp Y, comp Z); GLM_FUNC_DECL tref3<T> swizzle(comp X, comp Y, comp Z) GLM_FUNC_POST;
}; };
template <typename T> template <typename T>
struct tref3 struct tref3
{ {
GLM_FUNC_DECL tref3(T & x, T & y, T & z); GLM_FUNC_DECL tref3(T & x, T & y, T & z) GLM_FUNC_POST;
GLM_FUNC_DECL tref3(tref3<T> const & r); GLM_FUNC_DECL tref3(tref3<T> const & r) GLM_FUNC_POST;
GLM_FUNC_DECL explicit tref3(tvec3<T> const & v); GLM_FUNC_DECL explicit tref3(tvec3<T> const & v) GLM_FUNC_POST;
GLM_FUNC_DECL tref3<T> & operator= (tref3<T> const & r); GLM_FUNC_DECL tref3<T> & operator= (tref3<T> const & r) GLM_FUNC_POST;
GLM_FUNC_DECL tref3<T> & operator= (tvec3<T> const & v); GLM_FUNC_DECL tref3<T> & operator= (tvec3<T> const & v) GLM_FUNC_POST;
GLM_FUNC_DECL tvec3<T> operator() (); GLM_FUNC_DECL tvec3<T> operator() () GLM_FUNC_POST;
T & x; T & x;
T & y; T & y;

View File

@ -30,7 +30,7 @@ namespace glm{
namespace detail namespace detail
{ {
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec3<T>::size_type tvec3<T>::length() const GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec3<T>::size_type tvec3<T>::length() const GLM_FUNC_POST
{ {
return 3; return 3;
} }
@ -43,7 +43,7 @@ namespace detail
tvec3<T>::operator[] tvec3<T>::operator[]
( (
size_type i size_type i
) ) GLM_FUNC_POST
{ {
assert(i < this->length()); assert(i < this->length());
return (&x)[i]; return (&x)[i];
@ -54,7 +54,7 @@ namespace detail
tvec3<T>::operator[] tvec3<T>::operator[]
( (
size_type i size_type i
) const ) const GLM_FUNC_POST
{ {
assert(i < this->length()); assert(i < this->length());
return (&x)[i]; return (&x)[i];
@ -64,7 +64,7 @@ namespace detail
// Implicit basic constructors // Implicit basic constructors
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER tvec3<T>::tvec3() : GLM_FUNC_QUALIFIER tvec3<T>::tvec3() GLM_FUNC_POST :
x(value_type(0)), x(value_type(0)),
y(value_type(0)), y(value_type(0)),
z(value_type(0)) z(value_type(0))
@ -74,14 +74,14 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T>::tvec3 GLM_FUNC_QUALIFIER tvec3<T>::tvec3
( (
ctor ctor
) ) GLM_FUNC_POST
{} {}
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER tvec3<T>::tvec3 GLM_FUNC_QUALIFIER tvec3<T>::tvec3
( (
tvec3<T> const & v tvec3<T> const & v
) : ) GLM_FUNC_POST :
x(v.x), x(v.x),
y(v.y), y(v.y),
z(v.z) z(v.z)
@ -94,7 +94,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T>::tvec3 GLM_FUNC_QUALIFIER tvec3<T>::tvec3
( (
value_type const & s value_type const & s
) : ) GLM_FUNC_POST :
x(s), x(s),
y(s), y(s),
z(s) z(s)
@ -106,7 +106,7 @@ namespace detail
value_type const & s0, value_type const & s0,
value_type const & s1, value_type const & s1,
value_type const & s2 value_type const & s2
) : ) GLM_FUNC_POST :
x(s0), x(s0),
y(s1), y(s1),
z(s2) z(s2)
@ -119,7 +119,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T>::tvec3 GLM_FUNC_QUALIFIER tvec3<T>::tvec3
( (
tref3<T> const & r tref3<T> const & r
) : ) GLM_FUNC_POST :
x(r.x), x(r.x),
y(r.y), y(r.y),
z(r.z) z(r.z)
@ -131,7 +131,7 @@ namespace detail
( (
tref2<A> const & v, tref2<A> const & v,
B const & s B const & s
) : ) GLM_FUNC_POST :
x(value_type(v.x)), x(value_type(v.x)),
y(value_type(v.y)), y(value_type(v.y)),
z(value_type(s)) z(value_type(s))
@ -143,7 +143,7 @@ namespace detail
( (
A const & s, A const & s,
tref2<B> const & v tref2<B> const & v
) : ) GLM_FUNC_POST :
x(value_type(s)), x(value_type(s)),
y(value_type(v.x)), y(value_type(v.x)),
z(value_type(v.y)) z(value_type(v.y))
@ -157,7 +157,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T>::tvec3 GLM_FUNC_QUALIFIER tvec3<T>::tvec3
( (
U const & s U const & s
) : ) GLM_FUNC_POST :
x(value_type(s)), x(value_type(s)),
y(value_type(s)), y(value_type(s)),
z(value_type(s)) z(value_type(s))
@ -170,7 +170,7 @@ namespace detail
A const & x, A const & x,
B const & y, B const & y,
C const & z C const & z
) : ) GLM_FUNC_POST :
x(value_type(x)), x(value_type(x)),
y(value_type(y)), y(value_type(y)),
z(value_type(z)) z(value_type(z))
@ -185,7 +185,7 @@ namespace detail
( (
tvec2<A> const & v, tvec2<A> const & v,
B const & s B const & s
) : ) GLM_FUNC_POST :
x(value_type(v.x)), x(value_type(v.x)),
y(value_type(v.y)), y(value_type(v.y)),
z(value_type(s)) z(value_type(s))
@ -197,7 +197,7 @@ namespace detail
( (
A const & s, A const & s,
tvec2<B> const & v tvec2<B> const & v
) : ) GLM_FUNC_POST :
x(value_type(s)), x(value_type(s)),
y(value_type(v.x)), y(value_type(v.x)),
z(value_type(v.y)) z(value_type(v.y))
@ -208,7 +208,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T>::tvec3 GLM_FUNC_QUALIFIER tvec3<T>::tvec3
( (
tvec3<U> const & v tvec3<U> const & v
) : ) GLM_FUNC_POST :
x(value_type(v.x)), x(value_type(v.x)),
y(value_type(v.y)), y(value_type(v.y)),
z(value_type(v.z)) z(value_type(v.z))
@ -219,7 +219,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T>::tvec3 GLM_FUNC_QUALIFIER tvec3<T>::tvec3
( (
tvec4<U> const & v tvec4<U> const & v
) : ) GLM_FUNC_POST :
x(value_type(v.x)), x(value_type(v.x)),
y(value_type(v.y)), y(value_type(v.y)),
z(value_type(v.z)) z(value_type(v.z))
@ -232,7 +232,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T>& tvec3<T>::operator= GLM_FUNC_QUALIFIER tvec3<T>& tvec3<T>::operator=
( (
tvec3<T> const & v tvec3<T> const & v
) ) GLM_FUNC_POST
{ {
this->x = v.x; this->x = v.x;
this->y = v.y; this->y = v.y;
@ -245,7 +245,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T>& tvec3<T>::operator= GLM_FUNC_QUALIFIER tvec3<T>& tvec3<T>::operator=
( (
tvec3<U> const & v tvec3<U> const & v
) ) GLM_FUNC_POST
{ {
this->x = T(v.x); this->x = T(v.x);
this->y = T(v.y); this->y = T(v.y);
@ -258,7 +258,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator+= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator+=
( (
U const & s U const & s
) ) GLM_FUNC_POST
{ {
this->x += T(s); this->x += T(s);
this->y += T(s); this->y += T(s);
@ -271,7 +271,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator+= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator+=
( (
tvec3<U> const & v tvec3<U> const & v
) ) GLM_FUNC_POST
{ {
this->x += T(v.x); this->x += T(v.x);
this->y += T(v.y); this->y += T(v.y);
@ -284,7 +284,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator-= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator-=
( (
U const & s U const & s
) ) GLM_FUNC_POST
{ {
this->x -= T(s); this->x -= T(s);
this->y -= T(s); this->y -= T(s);
@ -297,7 +297,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator-= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator-=
( (
tvec3<U> const & v tvec3<U> const & v
) ) GLM_FUNC_POST
{ {
this->x -= T(v.x); this->x -= T(v.x);
this->y -= T(v.y); this->y -= T(v.y);
@ -310,7 +310,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator*= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator*=
( (
U const & s U const & s
) ) GLM_FUNC_POST
{ {
this->x *= T(s); this->x *= T(s);
this->y *= T(s); this->y *= T(s);
@ -323,7 +323,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator*= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator*=
( (
tvec3<U> const & v tvec3<U> const & v
) ) GLM_FUNC_POST
{ {
this->x *= T(v.x); this->x *= T(v.x);
this->y *= T(v.y); this->y *= T(v.y);
@ -336,7 +336,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator/= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator/=
( (
U const & s U const & s
) ) GLM_FUNC_POST
{ {
this->x /= T(s); this->x /= T(s);
this->y /= T(s); this->y /= T(s);
@ -349,7 +349,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator/= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator/=
( (
tvec3<U> const & v tvec3<U> const & v
) ) GLM_FUNC_POST
{ {
this->x /= T(v.x); this->x /= T(v.x);
this->y /= T(v.y); this->y /= T(v.y);
@ -358,7 +358,7 @@ namespace detail
} }
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator++() GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator++() GLM_FUNC_POST
{ {
++this->x; ++this->x;
++this->y; ++this->y;
@ -367,7 +367,7 @@ namespace detail
} }
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator--() GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator--() GLM_FUNC_POST
{ {
--this->x; --this->x;
--this->y; --this->y;
@ -383,7 +383,7 @@ namespace detail
( (
tvec3<T> const & v1, tvec3<T> const & v1,
tvec3<T> const & v2 tvec3<T> const & v2
) ) GLM_FUNC_POST
{ {
return (v1.x == v2.x) && (v1.y == v2.y) && (v1.z == v2.z); return (v1.x == v2.x) && (v1.y == v2.y) && (v1.z == v2.z);
} }
@ -393,7 +393,7 @@ namespace detail
( (
tvec3<T> const & v1, tvec3<T> const & v1,
tvec3<T> const & v2 tvec3<T> const & v2
) ) GLM_FUNC_POST
{ {
return (v1.x != v2.x) || (v1.y != v2.y) || (v1.z != v2.z); return (v1.x != v2.x) || (v1.y != v2.y) || (v1.z != v2.z);
} }
@ -406,7 +406,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator%= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator%=
( (
U const & s U const & s
) ) GLM_FUNC_POST
{ {
this->x %= s; this->x %= s;
this->y %= s; this->y %= s;
@ -419,7 +419,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator%= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator%=
( (
tvec3<U> const & v tvec3<U> const & v
) ) GLM_FUNC_POST
{ {
this->x %= v.x; this->x %= v.x;
this->y %= v.y; this->y %= v.y;
@ -432,7 +432,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator&= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator&=
( (
U const & s U const & s
) ) GLM_FUNC_POST
{ {
this->x &= s; this->x &= s;
this->y &= s; this->y &= s;
@ -445,7 +445,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator&= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator&=
( (
tvec3<U> const & v tvec3<U> const & v
) ) GLM_FUNC_POST
{ {
this->x &= v.x; this->x &= v.x;
this->y &= v.y; this->y &= v.y;
@ -458,7 +458,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator|= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator|=
( (
U const & s U const & s
) ) GLM_FUNC_POST
{ {
this->x |= s; this->x |= s;
this->y |= s; this->y |= s;
@ -471,7 +471,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator|= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator|=
( (
tvec3<U> const & v tvec3<U> const & v
) ) GLM_FUNC_POST
{ {
this->x |= v.x; this->x |= v.x;
this->y |= v.y; this->y |= v.y;
@ -484,7 +484,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator^= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator^=
( (
U const & s U const & s
) ) GLM_FUNC_POST
{ {
this->x ^= s; this->x ^= s;
this->y ^= s; this->y ^= s;
@ -497,7 +497,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator^= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator^=
( (
tvec3<U> const & v tvec3<U> const & v
) ) GLM_FUNC_POST
{ {
this->x ^= v.x; this->x ^= v.x;
this->y ^= v.y; this->y ^= v.y;
@ -510,7 +510,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator<<= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator<<=
( (
U const & s U const & s
) ) GLM_FUNC_POST
{ {
this->x <<= s; this->x <<= s;
this->y <<= s; this->y <<= s;
@ -523,7 +523,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator<<= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator<<=
( (
tvec3<U> const & v tvec3<U> const & v
) ) GLM_FUNC_POST
{ {
this->x <<= T(v.x); this->x <<= T(v.x);
this->y <<= T(v.y); this->y <<= T(v.y);
@ -536,7 +536,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator>>= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator>>=
( (
U const & s U const & s
) ) GLM_FUNC_POST
{ {
this->x >>= T(s); this->x >>= T(s);
this->y >>= T(s); this->y >>= T(s);
@ -549,7 +549,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator>>= GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator>>=
( (
tvec3<U> const & v tvec3<U> const & v
) ) GLM_FUNC_POST
{ {
this->x >>= T(v.x); this->x >>= T(v.x);
this->y >>= T(v.y); this->y >>= T(v.y);
@ -565,7 +565,7 @@ namespace detail
tvec3<T>::swizzle tvec3<T>::swizzle
( (
comp x comp x
) const ) const GLM_FUNC_POST
{ {
return (*this)[x]; return (*this)[x];
} }
@ -575,7 +575,7 @@ namespace detail
( (
comp x, comp x,
comp y comp y
) const ) const GLM_FUNC_POST
{ {
return tvec2<T>( return tvec2<T>(
(*this)[x], (*this)[x],
@ -588,7 +588,7 @@ namespace detail
comp x, comp x,
comp y, comp y,
comp z comp z
) const ) const GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
(*this)[x], (*this)[x],
@ -603,7 +603,7 @@ namespace detail
comp y, comp y,
comp z, comp z,
comp w comp w
) const ) const GLM_FUNC_POST
{ {
return tvec4<T>( return tvec4<T>(
(*this)[x], (*this)[x],
@ -617,7 +617,7 @@ namespace detail
( (
comp x, comp x,
comp y comp y
) ) GLM_FUNC_POST
{ {
return tref2<T>( return tref2<T>(
(*this)[x], (*this)[x],
@ -630,7 +630,7 @@ namespace detail
comp x, comp x,
comp y, comp y,
comp z comp z
) ) GLM_FUNC_POST
{ {
return tref3<T>( return tref3<T>(
(*this)[x], (*this)[x],
@ -646,7 +646,7 @@ namespace detail
( (
tvec3<T> const & v, tvec3<T> const & v,
T const & s T const & s
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v.x + T(s), v.x + T(s),
@ -659,7 +659,7 @@ namespace detail
( (
T const & s, T const & s,
tvec3<T> const & v tvec3<T> const & v
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
T(s) + v.x, T(s) + v.x,
@ -672,7 +672,7 @@ namespace detail
( (
tvec3<T> const & v1, tvec3<T> const & v1,
tvec3<T> const & v2 tvec3<T> const & v2
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v1.x + T(v2.x), v1.x + T(v2.x),
@ -686,7 +686,7 @@ namespace detail
( (
tvec3<T> const & v, tvec3<T> const & v,
T const & s T const & s
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v.x - T(s), v.x - T(s),
@ -699,7 +699,7 @@ namespace detail
( (
T const & s, T const & s,
tvec3<T> const & v tvec3<T> const & v
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
T(s) - v.x, T(s) - v.x,
@ -712,7 +712,7 @@ namespace detail
( (
tvec3<T> const & v1, tvec3<T> const & v1,
tvec3<T> const & v2 tvec3<T> const & v2
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v1.x - T(v2.x), v1.x - T(v2.x),
@ -726,7 +726,7 @@ namespace detail
( (
tvec3<T> const & v, tvec3<T> const & v,
T const & s T const & s
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v.x * T(s), v.x * T(s),
@ -739,7 +739,7 @@ namespace detail
( (
T const & s, T const & s,
tvec3<T> const & v tvec3<T> const & v
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
T(s) * v.x, T(s) * v.x,
@ -752,7 +752,7 @@ namespace detail
( (
tvec3<T> const & v1, tvec3<T> const & v1,
tvec3<T> const & v2 tvec3<T> const & v2
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v1.x * T(v2.x), v1.x * T(v2.x),
@ -766,7 +766,7 @@ namespace detail
( (
tvec3<T> const & v, tvec3<T> const & v,
T const & s T const & s
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v.x / T(s), v.x / T(s),
@ -779,7 +779,7 @@ namespace detail
( (
T const & s, T const & s,
tvec3<T> const & v tvec3<T> const & v
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
T(s) / v.x, T(s) / v.x,
@ -792,7 +792,7 @@ namespace detail
( (
tvec3<T> const & v1, tvec3<T> const & v1,
tvec3<T> const & v2 tvec3<T> const & v2
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v1.x / T(v2.x), v1.x / T(v2.x),
@ -805,7 +805,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> operator- GLM_FUNC_QUALIFIER tvec3<T> operator-
( (
tvec3<T> const & v tvec3<T> const & v
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
-v.x, -v.x,
@ -818,7 +818,7 @@ namespace detail
( (
tvec3<T> const & v, tvec3<T> const & v,
int int
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v.x + T(1), v.x + T(1),
@ -831,7 +831,7 @@ namespace detail
( (
tvec3<T> const & v, tvec3<T> const & v,
int int
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v.x - T(1), v.x - T(1),
@ -847,7 +847,7 @@ namespace detail
( (
tvec3<T> const & v, tvec3<T> const & v,
T const & s T const & s
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v.x % T(s), v.x % T(s),
@ -860,7 +860,7 @@ namespace detail
( (
T const & s, T const & s,
tvec3<T> const & v tvec3<T> const & v
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
T(s) % v.x, T(s) % v.x,
@ -873,7 +873,7 @@ namespace detail
( (
tvec3<T> const & v1, tvec3<T> const & v1,
tvec3<T> const & v2 tvec3<T> const & v2
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v1.x % T(v2.x), v1.x % T(v2.x),
@ -886,7 +886,7 @@ namespace detail
( (
tvec3<T> const & v, tvec3<T> const & v,
T const & s T const & s
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v.x & T(s), v.x & T(s),
@ -899,7 +899,7 @@ namespace detail
( (
T const & s, T const & s,
tvec3<T> const & v tvec3<T> const & v
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
T(s) & v.x, T(s) & v.x,
@ -912,7 +912,7 @@ namespace detail
( (
tvec3<T> const & v1, tvec3<T> const & v1,
tvec3<T> const & v2 tvec3<T> const & v2
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v1.x & T(v2.x), v1.x & T(v2.x),
@ -925,7 +925,7 @@ namespace detail
( (
tvec3<T> const & v, tvec3<T> const & v,
T const & s T const & s
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v.x | T(s), v.x | T(s),
@ -938,7 +938,7 @@ namespace detail
( (
T const & s, T const & s,
tvec3<T> const & v tvec3<T> const & v
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
T(s) | v.x, T(s) | v.x,
@ -951,7 +951,7 @@ namespace detail
( (
tvec3<T> const & v1, tvec3<T> const & v1,
tvec3<T> const & v2 tvec3<T> const & v2
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v1.x | T(v2.x), v1.x | T(v2.x),
@ -964,7 +964,7 @@ namespace detail
( (
tvec3<T> const & v, tvec3<T> const & v,
T const & s T const & s
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v.x ^ T(s), v.x ^ T(s),
@ -977,7 +977,7 @@ namespace detail
( (
T const & s, T const & s,
tvec3<T> const & v tvec3<T> const & v
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
T(s) ^ v.x, T(s) ^ v.x,
@ -990,7 +990,7 @@ namespace detail
( (
tvec3<T> const & v1, tvec3<T> const & v1,
tvec3<T> const & v2 tvec3<T> const & v2
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v1.x ^ T(v2.x), v1.x ^ T(v2.x),
@ -1003,7 +1003,7 @@ namespace detail
( (
tvec3<T> const & v, tvec3<T> const & v,
T const & s T const & s
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v.x << T(s), v.x << T(s),
@ -1016,7 +1016,7 @@ namespace detail
( (
T const & s, T const & s,
tvec3<T> const & v tvec3<T> const & v
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
T(s) << v.x, T(s) << v.x,
@ -1029,7 +1029,7 @@ namespace detail
( (
tvec3<T> const & v1, tvec3<T> const & v1,
tvec3<T> const & v2 tvec3<T> const & v2
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v1.x << T(v2.x), v1.x << T(v2.x),
@ -1042,7 +1042,7 @@ namespace detail
( (
tvec3<T> const & v, tvec3<T> const & v,
T const & s T const & s
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v.x >> T(s), v.x >> T(s),
@ -1055,7 +1055,7 @@ namespace detail
( (
T const & s, T const & s,
tvec3<T> const & v tvec3<T> const & v
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
s >> T(v.x), s >> T(v.x),
@ -1068,7 +1068,7 @@ namespace detail
( (
tvec3<T> const & v1, tvec3<T> const & v1,
tvec3<T> const & v2 tvec3<T> const & v2
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
v1.x >> T(v2.x), v1.x >> T(v2.x),
@ -1080,7 +1080,7 @@ namespace detail
GLM_FUNC_QUALIFIER tvec3<T> operator~ GLM_FUNC_QUALIFIER tvec3<T> operator~
( (
tvec3<T> const & v tvec3<T> const & v
) ) GLM_FUNC_POST
{ {
return tvec3<T>( return tvec3<T>(
~v.x, ~v.x,
@ -1092,7 +1092,7 @@ namespace detail
// tref definition // tref definition
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER tref3<T>::tref3(T & x, T & y, T & z) : GLM_FUNC_QUALIFIER tref3<T>::tref3(T & x, T & y, T & z) GLM_FUNC_POST :
x(x), x(x),
y(y), y(y),
z(z) z(z)
@ -1102,7 +1102,7 @@ namespace detail
GLM_FUNC_QUALIFIER tref3<T>::tref3 GLM_FUNC_QUALIFIER tref3<T>::tref3
( (
tref3<T> const & r tref3<T> const & r
) : ) GLM_FUNC_POST :
x(r.x), x(r.x),
y(r.y), y(r.y),
z(r.z) z(r.z)
@ -1112,7 +1112,7 @@ namespace detail
GLM_FUNC_QUALIFIER tref3<T>::tref3 GLM_FUNC_QUALIFIER tref3<T>::tref3
( (
tvec3<T> const & v tvec3<T> const & v
) : ) GLM_FUNC_POST :
x(v.x), x(v.x),
y(v.y), y(v.y),
z(v.z) z(v.z)
@ -1122,7 +1122,7 @@ namespace detail
GLM_FUNC_QUALIFIER tref3<T> & tref3<T>::operator= GLM_FUNC_QUALIFIER tref3<T> & tref3<T>::operator=
( (
tref3<T> const & r tref3<T> const & r
) ) GLM_FUNC_POST
{ {
x = r.x; x = r.x;
y = r.y; y = r.y;
@ -1134,7 +1134,7 @@ namespace detail
GLM_FUNC_QUALIFIER tref3<T> & tref3<T>::operator= GLM_FUNC_QUALIFIER tref3<T> & tref3<T>::operator=
( (
tvec3<T> const & v tvec3<T> const & v
) ) GLM_FUNC_POST
{ {
x = v.x; x = v.x;
y = v.y; y = v.y;
@ -1143,7 +1143,7 @@ namespace detail
} }
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER tvec3<T> tref3<T>::operator() () GLM_FUNC_QUALIFIER tvec3<T> tref3<T>::operator() () GLM_FUNC_POST
{ {
return tvec3<T>(this->x, this->y, this->z); return tvec3<T>(this->x, this->y, this->z);
} }

View File

@ -1,3 +1,4 @@
glmCreateTestGTC(core_amp)
glmCreateTestGTC(core_type_float) glmCreateTestGTC(core_type_float)
glmCreateTestGTC(core_type_half) glmCreateTestGTC(core_type_half)
glmCreateTestGTC(core_type_int) glmCreateTestGTC(core_type_int)

37
test/core/core_amp.cpp Normal file
View File

@ -0,0 +1,37 @@
///////////////////////////////////////////////////////////////////////////////////////////////////
// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
///////////////////////////////////////////////////////////////////////////////////////////////////
// Created : 2013-03-21
// Updated : 2013-03-21
// Licence : This source is under MIT licence
// File : test/core/core_amp.cpp
///////////////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <amp.h>
#include <glm/glm.hpp>
using namespace concurrency;
int test(int a, int b) restrict(amp, cpu)
{
return a + b;
}
int main()
{
int v[11] = {'G', 'd', 'k', 'k', 'n', 31, 'v', 'n', 'q', 'k', 'c'};
array_view<int> av(11, v);
parallel_for_each(av.extent, [=](index<1> idx) restrict(amp)
{
av[idx] += 1;
av[idx] = glm::clamp(av[idx], 0, 255);
});
for(unsigned int i = 0; i < 11; i++)
std::cout << static_cast<char>(av[i]);
return 0;
}