From 02b011651b43ba8e710b5f5cdf23f47d63587a3b Mon Sep 17 00:00:00 2001 From: Jesse Talavera-Greenberg Date: Fri, 2 Oct 2015 18:34:53 -0400 Subject: [PATCH] Add static constants to vec4 - Tests, too --- glm/detail/type_vec4.hpp | 16 +++++++++ glm/detail/type_vec4.inl | 64 ++++++++++++++++++++++++++++++++++++ test/core/core_type_vec4.cpp | 23 +++++++++++++ 3 files changed, 103 insertions(+) diff --git a/glm/detail/type_vec4.hpp b/glm/detail/type_vec4.hpp index 2d110c31..4d9b352c 100644 --- a/glm/detail/type_vec4.hpp +++ b/glm/detail/type_vec4.hpp @@ -112,6 +112,22 @@ namespace detail static GLM_RELAXED_CONSTEXPR precision prec = P; # endif//GLM_META_PROG_HELPERS + static const type ZERO; + static const type X; + static const type Y; + static const type Z; + static const type W; + static const type XY; + static const type XZ; + static const type XW; + static const type YZ; + static const type YW; + static const type ZW; + static const type XYZ; + static const type XYW; + static const type XZW; + static const type YZW; + static const type XYZW; // -- Data -- # if GLM_HAS_ANONYMOUS_UNION && GLM_NOT_BUGGY_VC32BITS diff --git a/glm/detail/type_vec4.inl b/glm/detail/type_vec4.inl index 80c75945..ee663a0c 100644 --- a/glm/detail/type_vec4.inl +++ b/glm/detail/type_vec4.inl @@ -32,6 +32,70 @@ namespace glm { +template +const tvec4 tvec4::ZERO = + tvec4(static_cast(0), static_cast(0), static_cast(0), static_cast(0)); + +template +const tvec4 tvec4::X = + tvec4(static_cast(1), static_cast(0), static_cast(0), static_cast(0)); + +template +const tvec4 tvec4::Y = + tvec4(static_cast(0), static_cast(1), static_cast(0), static_cast(0)); + +template +const tvec4 tvec4::Z = + tvec4(static_cast(0), static_cast(0), static_cast(1), static_cast(0)); + +template +const tvec4 tvec4::W = + tvec4(static_cast(0), static_cast(0), static_cast(0), static_cast(1)); + +template +const tvec4 tvec4::XY = + tvec4(static_cast(1), static_cast(1), static_cast(0), static_cast(0)); + +template +const tvec4 tvec4::XZ = + tvec4(static_cast(1), static_cast(0), static_cast(1), static_cast(0)); + +template +const tvec4 tvec4::XW = + tvec4(static_cast(1), static_cast(0), static_cast(0), static_cast(1)); + +template +const tvec4 tvec4::YZ = + tvec4(static_cast(0), static_cast(1), static_cast(1), static_cast(0)); + +template +const tvec4 tvec4::YW = + tvec4(static_cast(0), static_cast(1), static_cast(0), static_cast(1)); + +template +const tvec4 tvec4::ZW = + tvec4(static_cast(0), static_cast(0), static_cast(1), static_cast(1)); + +template +const tvec4 tvec4::XYZ = + tvec4(static_cast(1), static_cast(1), static_cast(1), static_cast(0)); + +template +const tvec4 tvec4::XYW = + tvec4(static_cast(1), static_cast(1), static_cast(0), static_cast(1)); + +template +const tvec4 tvec4::XZW = + tvec4(static_cast(1), static_cast(0), static_cast(1), static_cast(1)); + +template +const tvec4 tvec4::YZW = + tvec4(static_cast(0), static_cast(1), static_cast(1), static_cast(1)); + +template +const tvec4 tvec4::XYZW = + tvec4(static_cast(1), static_cast(1), static_cast(1), static_cast(1)); + // -- Implicit basic constructors -- # if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) diff --git a/test/core/core_type_vec4.cpp b/test/core/core_type_vec4.cpp index cc72ddaa..00b77db6 100644 --- a/test/core/core_type_vec4.cpp +++ b/test/core/core_type_vec4.cpp @@ -376,6 +376,28 @@ int test_operator_increment() return Error; } +int test_vec4_static_const() { + int Error(0); + + Error += (glm::ivec4(0, 0, 0, 0) == glm::ivec4::ZERO) ? 0 : 1; + Error += (glm::vec4(1, 0, 0, 0) == glm::vec4::X) ? 0 : 1; + Error += (glm::bvec4(false, true, false, false) == glm::bvec4::Y) ? 0 : 1; + Error += (glm::bvec4(false, false, true, false) == glm::bvec4::Z) ? 0 : 1; + Error += (glm::uvec4(0u, 0u, 0u, 1u) == glm::uvec4::W) ? 0 : 1; + Error += (glm::dvec4(1, 1, 0, 0) == glm::dvec4::XY) ? 0 : 1; + Error += (glm::vec4(1, 0, 1, 0) == glm::vec4::XZ) ? 0 : 1; + Error += (glm::vec4(1, 0, 0, 1) == glm::vec4::XW) ? 0 : 1; + Error += (glm::uvec4(0u, 1u, 1u, 0u) == glm::uvec4::YZ) ? 0 : 1; + Error += (glm::vec4(0, 1, 0, 1) == glm::vec4::YW) ? 0 : 1; + Error += (glm::dvec4(1, 1, 1, 0) == glm::dvec4::XYZ) ? 0 : 1; + Error += (glm::vec4(1, 1, 0, 1) == glm::vec4::XYW) ? 0 : 1; + Error += (glm::vec4(1, 0, 1, 1) == glm::vec4::XZW) ? 0 : 1; + Error += (glm::vec4(0, 1, 1, 1) == glm::vec4::YZW) ? 0 : 1; + Error += (glm::vec4(1, 1, 1, 1) == glm::vec4::XYZW) ? 0 : 1; + + return Error; +} + struct AoS { glm::vec4 A; @@ -486,6 +508,7 @@ int main() Error += test_vec4_perf_SoA(Size); # endif//NDEBUG + Error += test_vec4_static_const(); Error += test_vec4_ctor(); Error += test_vec4_size(); Error += test_vec4_operators();