Add operators

This commit is contained in:
Georg Hagen
2025-05-13 17:36:54 +02:00
parent 6409884713
commit 9215a0a305

View File

@@ -61,25 +61,25 @@ namespace OpenVulkano::Math
}
template<typename T, qualifier Q>
T maxVal(const glm::tvec3<T, Q>& vec)
T maxVal(const tvec3<T, Q>& vec)
{
return std::max(vec.x, std::max(vec.y, vec.z));
}
template<typename T, qualifier Q>
T maxVal(const glm::tvec4<T, Q>& vec)
T maxVal(const tvec4<T, Q>& vec)
{
return std::max(std::max(vec.x, vec.y), std::max(vec.z, vec.w));
}
template<typename T, qualifier Q>
T minVal(const glm::tvec3<T, Q>& vec)
T minVal(const tvec3<T, Q>& vec)
{
return std::min(vec.x, std::min(vec.y, vec.z));
}
template<typename T, qualifier Q>
T minVal(const glm::tvec4<T, Q>& vec)
T minVal(const tvec4<T, Q>& vec)
{
return std::min(std::min(vec.x, vec.y), std::min(vec.z, vec.w));
}
@@ -203,20 +203,33 @@ namespace OpenVulkano::Math
typedef Quaternion<int> QuaternionI;
}
template<glm::length_t L, typename T, glm::qualifier Q, typename = std::enable_if_t<std::is_integral_v<T>>>
glm::vec<L, float, Q> operator / (const float lhs, const glm::vec<L, T, Q>& rhs)
namespace glm
{
return lhs / glm::vec<L, float, Q>(rhs);
}
template<length_t L, typename T, typename F, qualifier Q>
requires (std::is_integral_v<T> && std::is_floating_point_v<F>)
vec<L, F, Q> operator / (const F lhs, const vec<L, T, Q>& rhs)
{
return lhs / glm::vec<L, F, Q>(rhs);
}
template<glm::length_t L, typename T, glm::qualifier Q, typename = std::enable_if_t<std::is_integral_v<T>>>
glm::vec<L, float, Q> operator * (const float lhs, const glm::vec<L, T, Q>& rhs)
{
return lhs * glm::vec<L, float, Q>(rhs);
}
template<length_t L, typename T, typename F, qualifier Q>
requires (std::is_integral_v<T> && std::is_floating_point_v<F>)
vec<L, F, Q> operator / (const vec<L, F, Q>& lhs, const T rhs)
{
return lhs / static_cast<F>(rhs);
}
template<glm::length_t L, typename T, glm::qualifier Q, typename = std::enable_if_t<std::is_integral_v<T>>>
glm::vec<L, float, Q> operator * (const glm::vec<L, float, Q>& lhs, const T rhs)
{
return lhs * static_cast<float>(rhs);
}
template<length_t L, typename T, typename F, qualifier Q>
requires (std::is_integral_v<T> && std::is_floating_point_v<F>)
vec<L, F, Q> operator * (const F lhs, const vec<L, T, Q>& rhs)
{
return lhs * glm::vec<L, F, Q>(rhs);
}
template<length_t L, typename F, typename T, qualifier Q>
requires (std::is_integral_v<T> && std::is_floating_point_v<F>)
vec<L, F, Q> operator * (const vec<L, F, Q>& lhs, const T rhs)
{
return lhs * static_cast<F>(rhs);
}
}