From 87c90590beda3f611325ec5b426762d60f752a42 Mon Sep 17 00:00:00 2001 From: Dave Reid Date: Fri, 21 Dec 2012 07:40:03 +1000 Subject: [PATCH] Add support for x,y,z,w accessors to fvec4SIMD. This is done via a union. It must be enabled with GLM_SIMD_ENABLE_XYZW_UNION. A nameless struct/union warning in VC (C4201) is explicitly disabled with the "pragma warning(push/pop)" system. Allowing xyzw access makes it much easier to toggle between SIMD and non-SIMD builds. --- glm/gtx/simd_vec4.hpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/glm/gtx/simd_vec4.hpp b/glm/gtx/simd_vec4.hpp index d18fbb8e..3e36cc91 100644 --- a/glm/gtx/simd_vec4.hpp +++ b/glm/gtx/simd_vec4.hpp @@ -54,6 +54,14 @@ # pragma message("GLM: GLM_GTX_simd_vec4 extension included") #endif + +// Warning silencer for nameless struct/union. +#if (GLM_COMPILER & GLM_COMPILER_VC) +# pragma warning(push) +# pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union +#endif + + namespace glm{ namespace detail { @@ -69,7 +77,15 @@ namespace detail typedef fvec4SIMD type; typedef tvec4 bool_type; - __m128 Data; +#ifdef GLM_SIMD_ENABLE_XYZW_UNION + union + { + __m128 Data; + struct {float x, y, z, w;}; + }; +#else + __m128 Data; +#endif ////////////////////////////////////// // Implicit basic constructors @@ -490,6 +506,12 @@ namespace detail #include "simd_vec4.inl" + +#if (GLM_COMPILER & GLM_COMPILER_VC) +# pragma warning(pop) +#endif + + #endif//(GLM_ARCH != GLM_ARCH_PURE) #endif//GLM_GTX_simd_vec4