#pragma once #if !defined(MIJIN_GEO_GLM_ADAPTER_HPP_INCLUDED) #define MIJIN_GEO_GLM_ADAPTER_HPP_INCLUDED 1 #include #include #include #include "./geometry_traits.hpp" namespace mijin { template<> struct Vector2Traits { constexpr float getX(const glm::vec2& vector) const noexcept { return vector.x; } constexpr float getY(const glm::vec2& vector) const noexcept { return vector.y; } constexpr void setX(glm::vec2& vector, float value) const noexcept { vector.x = value; } constexpr void setY(glm::vec2& vector, float value) const noexcept { vector.y = value; } }; static_assert(Vector2, "Vector2Adapter not working."); template<> struct Vector3Traits { constexpr float getX(const glm::vec3& vector) const noexcept { return vector.x; } constexpr float getY(const glm::vec3& vector) const noexcept { return vector.y; } constexpr float getZ(const glm::vec3& vector) const noexcept { return vector.z; } constexpr void setX(glm::vec3& vector, float value) const noexcept { vector.x = value; } constexpr void setY(glm::vec3& vector, float value) const noexcept { vector.y = value; } constexpr void setZ(glm::vec3& vector, float value) const noexcept { vector.z = value; } }; static_assert(Vector3, "Vector3Adapter not working."); template<> struct Vector4Traits { constexpr float getX(const glm::vec4& vector) const noexcept { return vector.x; } constexpr float getY(const glm::vec4& vector) const noexcept { return vector.y; } constexpr float getZ(const glm::vec4& vector) const noexcept { return vector.z; } constexpr float getW(const glm::vec4& vector) const noexcept { return vector.w; } constexpr void setX(glm::vec4& vector, float value) const noexcept { vector.x = value; } constexpr void setY(glm::vec4& vector, float value) const noexcept { vector.y = value; } constexpr void setZ(glm::vec4& vector, float value) const noexcept { vector.z = value; } constexpr void setW(glm::vec4& vector, float value) const noexcept { vector.w = value; } }; static_assert(Vector4, "Vector4Adapter not working."); } #endif // MIJIN_GEO_GLM_ADAPTER_HPP_INCLUDED