|
@@ -1,6 +1,7 @@
|
|
|
/// @ref core
|
|
/// @ref core
|
|
|
|
|
|
|
|
#include "compute_vector_relational.hpp"
|
|
#include "compute_vector_relational.hpp"
|
|
|
|
|
+#include "compute_vector_decl.hpp"
|
|
|
|
|
|
|
|
namespace glm
|
|
namespace glm
|
|
|
{
|
|
{
|
|
@@ -225,120 +226,84 @@ namespace glm
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(U scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(U scalar)
|
|
|
{
|
|
{
|
|
|
- this->x += static_cast<T>(scalar);
|
|
|
|
|
- this->y += static_cast<T>(scalar);
|
|
|
|
|
- this->z += static_cast<T>(scalar);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_add<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(scalar)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<1, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<1, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x += static_cast<T>(v.x);
|
|
|
|
|
- this->y += static_cast<T>(v.x);
|
|
|
|
|
- this->z += static_cast<T>(v.x);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_add<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<1, T, Q>(v.x)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<3, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<3, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x += static_cast<T>(v.x);
|
|
|
|
|
- this->y += static_cast<T>(v.y);
|
|
|
|
|
- this->z += static_cast<T>(v.z);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_add<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(U scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(U scalar)
|
|
|
{
|
|
{
|
|
|
- this->x -= static_cast<T>(scalar);
|
|
|
|
|
- this->y -= static_cast<T>(scalar);
|
|
|
|
|
- this->z -= static_cast<T>(scalar);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_sub<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(scalar)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<1, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<1, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x -= static_cast<T>(v.x);
|
|
|
|
|
- this->y -= static_cast<T>(v.x);
|
|
|
|
|
- this->z -= static_cast<T>(v.x);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_sub<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<1, T, Q>(v.x)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<3, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<3, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x -= static_cast<T>(v.x);
|
|
|
|
|
- this->y -= static_cast<T>(v.y);
|
|
|
|
|
- this->z -= static_cast<T>(v.z);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_sub<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(U scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(U scalar)
|
|
|
{
|
|
{
|
|
|
- this->x *= static_cast<T>(scalar);
|
|
|
|
|
- this->y *= static_cast<T>(scalar);
|
|
|
|
|
- this->z *= static_cast<T>(scalar);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_mul<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(static_cast<T>(scalar))));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<1, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<1, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x *= static_cast<T>(v.x);
|
|
|
|
|
- this->y *= static_cast<T>(v.x);
|
|
|
|
|
- this->z *= static_cast<T>(v.x);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_mul<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v.x)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<3, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<3, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x *= static_cast<T>(v.x);
|
|
|
|
|
- this->y *= static_cast<T>(v.y);
|
|
|
|
|
- this->z *= static_cast<T>(v.z);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_mul<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(U v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(U v)
|
|
|
{
|
|
{
|
|
|
- this->x /= static_cast<T>(v);
|
|
|
|
|
- this->y /= static_cast<T>(v);
|
|
|
|
|
- this->z /= static_cast<T>(v);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_div<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<1, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<1, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x /= static_cast<T>(v.x);
|
|
|
|
|
- this->y /= static_cast<T>(v.x);
|
|
|
|
|
- this->z /= static_cast<T>(v.x);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_div<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v.x)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<3, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<3, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x /= static_cast<T>(v.x);
|
|
|
|
|
- this->y /= static_cast<T>(v.y);
|
|
|
|
|
- this->z /= static_cast<T>(v.z);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_div<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// -- Increment and decrement operators --
|
|
// -- Increment and decrement operators --
|
|
@@ -383,180 +348,127 @@ namespace glm
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(U scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(U scalar)
|
|
|
{
|
|
{
|
|
|
- this->x %= scalar;
|
|
|
|
|
- this->y %= scalar;
|
|
|
|
|
- this->z %= scalar;
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_mod<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(scalar)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<1, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<1, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x %= v.x;
|
|
|
|
|
- this->y %= v.x;
|
|
|
|
|
- this->z %= v.x;
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_mod<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<3, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<3, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x %= v.x;
|
|
|
|
|
- this->y %= v.y;
|
|
|
|
|
- this->z %= v.z;
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_mod<3, T, Q, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(U scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(U scalar)
|
|
|
{
|
|
{
|
|
|
- this->x &= scalar;
|
|
|
|
|
- this->y &= scalar;
|
|
|
|
|
- this->z &= scalar;
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_and<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(scalar)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<1, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<1, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x &= v.x;
|
|
|
|
|
- this->y &= v.x;
|
|
|
|
|
- this->z &= v.x;
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_and<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<3, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<3, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x &= v.x;
|
|
|
|
|
- this->y &= v.y;
|
|
|
|
|
- this->z &= v.z;
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_and<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(U scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(U scalar)
|
|
|
{
|
|
{
|
|
|
- this->x |= scalar;
|
|
|
|
|
- this->y |= scalar;
|
|
|
|
|
- this->z |= scalar;
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_or<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(scalar)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<1, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<1, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x |= v.x;
|
|
|
|
|
- this->y |= v.x;
|
|
|
|
|
- this->z |= v.x;
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_or<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<3, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<3, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x |= v.x;
|
|
|
|
|
- this->y |= v.y;
|
|
|
|
|
- this->z |= v.z;
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_or<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(U scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(U scalar)
|
|
|
{
|
|
{
|
|
|
- this->x ^= scalar;
|
|
|
|
|
- this->y ^= scalar;
|
|
|
|
|
- this->z ^= scalar;
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_xor<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(scalar)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<1, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<1, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x ^= v.x;
|
|
|
|
|
- this->y ^= v.x;
|
|
|
|
|
- this->z ^= v.x;
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_xor<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v.x)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<3, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<3, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x ^= v.x;
|
|
|
|
|
- this->y ^= v.y;
|
|
|
|
|
- this->z ^= v.z;
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_xor<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(U scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(U scalar)
|
|
|
{
|
|
{
|
|
|
- this->x <<= scalar;
|
|
|
|
|
- this->y <<= scalar;
|
|
|
|
|
- this->z <<= scalar;
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_shift_left<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(scalar)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<1, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<1, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x <<= static_cast<T>(v.x);
|
|
|
|
|
- this->y <<= static_cast<T>(v.x);
|
|
|
|
|
- this->z <<= static_cast<T>(v.x);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_shift_left<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<1, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<3, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<3, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x <<= static_cast<T>(v.x);
|
|
|
|
|
- this->y <<= static_cast<T>(v.y);
|
|
|
|
|
- this->z <<= static_cast<T>(v.z);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_shift_left<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(U scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(U scalar)
|
|
|
{
|
|
{
|
|
|
- this->x >>= static_cast<T>(scalar);
|
|
|
|
|
- this->y >>= static_cast<T>(scalar);
|
|
|
|
|
- this->z >>= static_cast<T>(scalar);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_shift_right<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(scalar)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<1, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<1, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x >>= static_cast<T>(v.x);
|
|
|
|
|
- this->y >>= static_cast<T>(v.x);
|
|
|
|
|
- this->z >>= static_cast<T>(v.x);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_shift_right<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
template<typename U>
|
|
template<typename U>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<3, U, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<3, U, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- this->x >>= static_cast<T>(v.x);
|
|
|
|
|
- this->y >>= static_cast<T>(v.y);
|
|
|
|
|
- this->z >>= static_cast<T>(v.z);
|
|
|
|
|
- return *this;
|
|
|
|
|
|
|
+ return (*this = detail::compute_vec_shift_right<3, T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<3, T, Q>(v)));
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// -- Unary arithmetic operators --
|
|
// -- Unary arithmetic operators --
|
|
@@ -570,10 +482,7 @@ namespace glm
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- -v.x,
|
|
|
|
|
- -v.y,
|
|
|
|
|
- -v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(0) -= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// -- Binary arithmetic operators --
|
|
// -- Binary arithmetic operators --
|
|
@@ -581,181 +490,122 @@ namespace glm
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x + scalar,
|
|
|
|
|
- v.y + scalar,
|
|
|
|
|
- v.z + scalar);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) += scalar;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
- GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x + scalar.x,
|
|
|
|
|
- v.y + scalar.x,
|
|
|
|
|
- v.z + scalar.x);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v1) += v2;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar + v.x,
|
|
|
|
|
- scalar + v.y,
|
|
|
|
|
- scalar + v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) += scalar;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar.x + v.x,
|
|
|
|
|
- scalar.x + v.y,
|
|
|
|
|
- scalar.x + v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar) += v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v1.x + v2.x,
|
|
|
|
|
- v1.y + v2.y,
|
|
|
|
|
- v1.z + v2.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v1) += v2;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x - scalar,
|
|
|
|
|
- v.y - scalar,
|
|
|
|
|
- v.z - scalar);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) -= scalar;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x - scalar.x,
|
|
|
|
|
- v.y - scalar.x,
|
|
|
|
|
- v.z - scalar.x);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) -= scalar.x;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar - v.x,
|
|
|
|
|
- scalar - v.y,
|
|
|
|
|
- scalar - v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar) -= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar.x - v.x,
|
|
|
|
|
- scalar.x - v.y,
|
|
|
|
|
- scalar.x - v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar) -= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v1.x - v2.x,
|
|
|
|
|
- v1.y - v2.y,
|
|
|
|
|
- v1.z - v2.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v1) -= v2;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x * scalar,
|
|
|
|
|
- v.y * scalar,
|
|
|
|
|
- v.z * scalar);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) *= scalar;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x * scalar.x,
|
|
|
|
|
- v.y * scalar.x,
|
|
|
|
|
- v.z * scalar.x);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) *= scalar.x;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar * v.x,
|
|
|
|
|
- scalar * v.y,
|
|
|
|
|
- scalar * v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) *= scalar;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar.x * v.x,
|
|
|
|
|
- scalar.x * v.y,
|
|
|
|
|
- scalar.x * v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) *= scalar.x;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v1.x * v2.x,
|
|
|
|
|
- v1.y * v2.y,
|
|
|
|
|
- v1.z * v2.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v1) *= v2;
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x / scalar,
|
|
|
|
|
- v.y / scalar,
|
|
|
|
|
- v.z / scalar);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) /= scalar;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x / scalar.x,
|
|
|
|
|
- v.y / scalar.x,
|
|
|
|
|
- v.z / scalar.x);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) /= scalar.x;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar / v.x,
|
|
|
|
|
- scalar / v.y,
|
|
|
|
|
- scalar / v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar) /= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar.x / v.x,
|
|
|
|
|
- scalar.x / v.y,
|
|
|
|
|
- scalar.x / v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar) /= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v1.x / v2.x,
|
|
|
|
|
- v1.y / v2.y,
|
|
|
|
|
- v1.z / v2.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v1) /= v2;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// -- Binary bit operators --
|
|
// -- Binary bit operators --
|
|
@@ -763,271 +613,181 @@ namespace glm
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x % scalar,
|
|
|
|
|
- v.y % scalar,
|
|
|
|
|
- v.z % scalar);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) %= scalar;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x % scalar.x,
|
|
|
|
|
- v.y % scalar.x,
|
|
|
|
|
- v.z % scalar.x);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) %= scalar.x;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar % v.x,
|
|
|
|
|
- scalar % v.y,
|
|
|
|
|
- scalar % v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar) %= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar.x % v.x,
|
|
|
|
|
- scalar.x % v.y,
|
|
|
|
|
- scalar.x % v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar.x) %= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v1.x % v2.x,
|
|
|
|
|
- v1.y % v2.y,
|
|
|
|
|
- v1.z % v2.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v1) %= v2;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, T scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, T scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x & scalar,
|
|
|
|
|
- v.y & scalar,
|
|
|
|
|
- v.z & scalar);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) &= scalar;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x & scalar.x,
|
|
|
|
|
- v.y & scalar.x,
|
|
|
|
|
- v.z & scalar.x);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) &= scalar.x;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar & v.x,
|
|
|
|
|
- scalar & v.y,
|
|
|
|
|
- scalar & v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar) &= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar.x & v.x,
|
|
|
|
|
- scalar.x & v.y,
|
|
|
|
|
- scalar.x & v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar.x) &= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v1.x & v2.x,
|
|
|
|
|
- v1.y & v2.y,
|
|
|
|
|
- v1.z & v2.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v1) &= v2;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x | scalar,
|
|
|
|
|
- v.y | scalar,
|
|
|
|
|
- v.z | scalar);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) |= scalar;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x | scalar.x,
|
|
|
|
|
- v.y | scalar.x,
|
|
|
|
|
- v.z | scalar.x);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) |= scalar.x;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar | v.x,
|
|
|
|
|
- scalar | v.y,
|
|
|
|
|
- scalar | v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar) |= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar.x | v.x,
|
|
|
|
|
- scalar.x | v.y,
|
|
|
|
|
- scalar.x | v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar.x) |= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v1.x | v2.x,
|
|
|
|
|
- v1.y | v2.y,
|
|
|
|
|
- v1.z | v2.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v1) |= v2;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x ^ scalar,
|
|
|
|
|
- v.y ^ scalar,
|
|
|
|
|
- v.z ^ scalar);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) ^= scalar;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x ^ scalar.x,
|
|
|
|
|
- v.y ^ scalar.x,
|
|
|
|
|
- v.z ^ scalar.x);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) ^= scalar.x;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar ^ v.x,
|
|
|
|
|
- scalar ^ v.y,
|
|
|
|
|
- scalar ^ v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar) ^= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar.x ^ v.x,
|
|
|
|
|
- scalar.x ^ v.y,
|
|
|
|
|
- scalar.x ^ v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar.x) ^= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v1.x ^ v2.x,
|
|
|
|
|
- v1.y ^ v2.y,
|
|
|
|
|
- v1.z ^ v2.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v1) ^= v2;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x << scalar,
|
|
|
|
|
- v.y << scalar,
|
|
|
|
|
- v.z << scalar);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) <<= scalar;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x << scalar.x,
|
|
|
|
|
- v.y << scalar.x,
|
|
|
|
|
- v.z << scalar.x);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) <<= scalar.x;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar << v.x,
|
|
|
|
|
- scalar << v.y,
|
|
|
|
|
- scalar << v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar) << v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar.x << v.x,
|
|
|
|
|
- scalar.x << v.y,
|
|
|
|
|
- scalar.x << v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar.x) << v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v1.x << v2.x,
|
|
|
|
|
- v1.y << v2.y,
|
|
|
|
|
- v1.z << v2.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v1) <<= v2;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x >> scalar,
|
|
|
|
|
- v.y >> scalar,
|
|
|
|
|
- v.z >> scalar);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) >>= scalar;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v.x >> scalar.x,
|
|
|
|
|
- v.y >> scalar.x,
|
|
|
|
|
- v.z >> scalar.x);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v) >>= scalar.x;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar >> v.x,
|
|
|
|
|
- scalar >> v.y,
|
|
|
|
|
- scalar >> v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar) >>= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- scalar.x >> v.x,
|
|
|
|
|
- scalar.x >> v.y,
|
|
|
|
|
- scalar.x >> v.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(scalar.x) >>= v;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)
|
|
|
{
|
|
{
|
|
|
- return vec<3, T, Q>(
|
|
|
|
|
- v1.x >> v2.x,
|
|
|
|
|
- v1.y >> v2.y,
|
|
|
|
|
- v1.z >> v2.z);
|
|
|
|
|
|
|
+ return vec<3, T, Q>(v1) >>= v2;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template<typename T, qualifier Q>
|
|
template<typename T, qualifier Q>
|
|
@@ -1068,3 +828,158 @@ namespace glm
|
|
|
return vec<3, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z);
|
|
return vec<3, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z);
|
|
|
}
|
|
}
|
|
|
}//namespace glm
|
|
}//namespace glm
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+#if GLM_CONFIG_SIMD == GLM_ENABLE
|
|
|
|
|
+# include "type_vec_simd.inl"
|
|
|
|
|
+
|
|
|
|
|
+namespace glm {
|
|
|
|
|
+
|
|
|
|
|
+#if (GLM_ARCH & GLM_ARCH_NEON_BIT) && !GLM_CONFIG_XYZW_ONLY
|
|
|
|
|
+ CTORSL(3, CTOR_FLOAT);
|
|
|
|
|
+ CTORSL(3, CTOR_INT);
|
|
|
|
|
+ CTORSL(3, CTOR_UINT);
|
|
|
|
|
+ CTORSL(3, CTOR_VECF_INT3);
|
|
|
|
|
+ CTORSL(3, CTOR_VECF_UINT3);
|
|
|
|
|
+ CTORSL(3, CTOR_VECF_VECF);
|
|
|
|
|
+ CTORSL(3, CTOR_VECF_VECI);
|
|
|
|
|
+ CTORSL(3, CTOR_VECF_VECU);
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
|
|
|
|
|
+ CTORSL(3, CTOR_FLOAT_COPY3);
|
|
|
|
|
+ CTORSL(3, CTOR_DOUBLE_COPY3);
|
|
|
|
|
+ CTORSL(3, CTOR_FLOAT);
|
|
|
|
|
+ CTORSL(3, CTOR_FLOAT3);
|
|
|
|
|
+ CTORSL(3, CTOR_DOUBLE3);
|
|
|
|
|
+ CTORSL(3, CTOR_INT);
|
|
|
|
|
+ CTORSL(3, CTOR_INT3);
|
|
|
|
|
+ CTORSL(3, CTOR_VECF_INT3);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ template<>
|
|
|
|
|
+ template<>
|
|
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, double, aligned_highp>::vec(const vec<3, double, aligned_highp>& v)
|
|
|
|
|
+#if (GLM_ARCH & GLM_ARCH_AVX_BIT)
|
|
|
|
|
+ :data(v.data) {}
|
|
|
|
|
+#else
|
|
|
|
|
+ {
|
|
|
|
|
+ data.setv(0, v.data.getv(0));
|
|
|
|
|
+ data.setv(1, v.data.getv(1));
|
|
|
|
|
+ }
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ template<>
|
|
|
|
|
+ template<>
|
|
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, float, aligned_highp>::vec(const vec<3, float, aligned_highp>& v) :
|
|
|
|
|
+ data(v.data) {}
|
|
|
|
|
+
|
|
|
|
|
+ template<>
|
|
|
|
|
+ template<>
|
|
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, float, aligned_highp>::vec(const vec<3, float, packed_highp>& v)
|
|
|
|
|
+ {
|
|
|
|
|
+ data = _mm_set_ps(v[2], v[2], v[1], v[0]);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ template<>
|
|
|
|
|
+ template<>
|
|
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, float, packed_highp>::vec(const vec<3, float, aligned_highp>& v)
|
|
|
|
|
+ {
|
|
|
|
|
+ _mm_store_sd(reinterpret_cast<double*>(this), _mm_castps_pd(v.data));
|
|
|
|
|
+ __m128 mz = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(2, 2, 2, 2));
|
|
|
|
|
+ _mm_store_ss(reinterpret_cast<float*>(this)+2, mz);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ template<>
|
|
|
|
|
+ template<>
|
|
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, double, aligned_highp>::vec(const vec<3, double, packed_highp>& v)
|
|
|
|
|
+ {
|
|
|
|
|
+#if (GLM_ARCH & GLM_ARCH_AVX_BIT)
|
|
|
|
|
+ data = _mm256_set_pd(v[2], v[2], v[1], v[0]);
|
|
|
|
|
+#else
|
|
|
|
|
+ data.setv(0, _mm_loadu_pd(reinterpret_cast<const double*>(&v)));
|
|
|
|
|
+ data.setv(1, _mm_loadu_pd(reinterpret_cast<const double*>(&v)+2));
|
|
|
|
|
+#endif
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ template<>
|
|
|
|
|
+ template<>
|
|
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, double, packed_highp>::vec(const vec<3, double, aligned_highp>& v)
|
|
|
|
|
+ {
|
|
|
|
|
+#if (GLM_ARCH & GLM_ARCH_AVX_BIT)
|
|
|
|
|
+ __m256d T1 = _mm256_permute_pd(v.data, 1);
|
|
|
|
|
+ _mm_store_sd((reinterpret_cast<double*>(this)) + 0, _mm256_castpd256_pd128(v.data));
|
|
|
|
|
+ _mm_store_sd((reinterpret_cast<double*>(this)) + 1, _mm256_castpd256_pd128(T1));
|
|
|
|
|
+ _mm_store_sd((reinterpret_cast<double*>(this)) + 2, _mm256_extractf128_pd(v.data, 1));
|
|
|
|
|
+#else
|
|
|
|
|
+ _mm_storeu_pd(reinterpret_cast<double*>(this), v.data.getv(0));
|
|
|
|
|
+ _mm_store_sd((reinterpret_cast<double*>(this)) + 2, v.data.getv(1));
|
|
|
|
|
+#endif
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ template<>
|
|
|
|
|
+ template<>
|
|
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, int, aligned_highp>::vec(const vec<3, int, aligned_highp>& v) :
|
|
|
|
|
+ data(v.data)
|
|
|
|
|
+ {
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ template<>
|
|
|
|
|
+ template<>
|
|
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, int, aligned_highp>::vec(const vec<3, int, packed_highp>& v)
|
|
|
|
|
+ {
|
|
|
|
|
+ __m128 mx = _mm_load_ss(reinterpret_cast<const float*>(&v[0]));
|
|
|
|
|
+ __m128 my = _mm_load_ss(reinterpret_cast<const float*>(&v[1]));
|
|
|
|
|
+ __m128 mz = _mm_load_ss(reinterpret_cast<const float*>(&v[2]));
|
|
|
|
|
+ __m128 mxy = _mm_unpacklo_ps(mx, my);
|
|
|
|
|
+ data = _mm_castps_si128(_mm_movelh_ps(mxy, mz));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ template<>
|
|
|
|
|
+ template<>
|
|
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, int, packed_highp>::vec(const vec<3, int, aligned_highp>& v)
|
|
|
|
|
+ {
|
|
|
|
|
+ _mm_store_sd(reinterpret_cast<double*>(this), _mm_castsi128_pd(v.data));
|
|
|
|
|
+ __m128 mz = _mm_shuffle_ps(_mm_castsi128_ps(v.data), _mm_castsi128_ps(v.data), _MM_SHUFFLE(2, 2, 2, 2));
|
|
|
|
|
+ _mm_store_ss(reinterpret_cast<float*>(this)+2, mz);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ template<>
|
|
|
|
|
+ template<>
|
|
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, unsigned int, aligned_highp>::vec(const vec<3, unsigned int, aligned_highp>& v) :
|
|
|
|
|
+ data(v.data)
|
|
|
|
|
+ {
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ template<>
|
|
|
|
|
+ template<>
|
|
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, unsigned int, aligned_highp>::vec(const vec<3, unsigned int, packed_highp>& v)
|
|
|
|
|
+ {
|
|
|
|
|
+ __m128 mx = _mm_load_ss(reinterpret_cast<const float*>(&v[0]));
|
|
|
|
|
+ __m128 my = _mm_load_ss(reinterpret_cast<const float*>(&v[1]));
|
|
|
|
|
+ __m128 mz = _mm_load_ss(reinterpret_cast<const float*>(&v[2]));
|
|
|
|
|
+ __m128 mxy = _mm_unpacklo_ps(mx, my);
|
|
|
|
|
+ data = _mm_castps_si128(_mm_movelh_ps(mxy, mz));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ template<>
|
|
|
|
|
+ template<>
|
|
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, unsigned int, packed_highp>::vec(const vec<3, unsigned int, aligned_highp>& v)
|
|
|
|
|
+ {
|
|
|
|
|
+ _mm_store_sd(reinterpret_cast<double*>(this), _mm_castsi128_pd(v.data));
|
|
|
|
|
+ __m128 mz = _mm_shuffle_ps(_mm_castsi128_ps(v.data), _mm_castsi128_ps(v.data), _MM_SHUFFLE(2, 2, 2, 2));
|
|
|
|
|
+ _mm_store_ss(reinterpret_cast<float*>(this) + 2, mz);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ CTORSL(3, CTOR_DOUBLE);
|
|
|
|
|
+ //CTORSL(3, CTOR_INT64);
|
|
|
|
|
+
|
|
|
|
|
+#endif //GLM_ARCH & GLM_ARCH_SSE2_BITt
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#endif
|