00001 
00002 
00004 
00005 
00006 
00007 
00009 
00010 
00011 
00013 
00014 #ifndef glm_gtx_simd_vec4
00015 #define glm_gtx_simd_vec4
00016 
00017 
00018 #include "../glm.hpp"
00019 #include "../core/intrinsic_common.hpp"
00020 
00021 namespace glm
00022 {
00023         namespace detail
00024         {
00025                 GLM_ALIGN(4) struct fvec4SIMD
00026                 {
00027                         static __m128 one;
00028 
00029                         union
00030                         {
00031                                 __m128 Data;
00032                                 struct{float x, y, z, w;};
00033                                 float array[4];
00034                         };
00035 
00037                         
00038 
00039                         fvec4SIMD();
00040                         fvec4SIMD(__m128 const & Data);
00041                         fvec4SIMD(fvec4SIMD const & v);
00042                         fvec4SIMD(tvec4<float> const & v);
00043 
00045                         
00046 
00047                         fvec4SIMD(float const & s);
00048                         fvec4SIMD(float const & x, float const & y, float const & z, float const & w);
00049                         fvec4SIMD(float const v[4]);
00050 
00053 
00054                         
00055 
00058 
00059                         fvec4SIMD(vec2 const & v, float const & s1, float const & s2);
00060                         fvec4SIMD(float const & s1, vec2 const & v, float const & s2);
00061                         fvec4SIMD(float const & s1, float const & s2, vec2 const & v);
00062                         fvec4SIMD(vec3 const & v, float const & s);
00063                         fvec4SIMD(float const & s, vec3 const & v);
00064                         fvec4SIMD(vec2 const & v1, vec2 const & v2);
00065                         
00066 
00068                         
00069 
00070                         fvec4SIMD& operator= (fvec4SIMD const & v);
00071                         fvec4SIMD& operator+=(fvec4SIMD const & v);
00072                         fvec4SIMD& operator-=(fvec4SIMD const & v);
00073                         fvec4SIMD& operator*=(fvec4SIMD const & v);
00074                         fvec4SIMD& operator/=(fvec4SIMD const & v);
00075 
00076                         fvec4SIMD& operator+=(float const & s);
00077                         fvec4SIMD& operator-=(float const & s);
00078                         fvec4SIMD& operator*=(float const & s);
00079                         fvec4SIMD& operator/=(float const & s);
00080 
00081                         fvec4SIMD& operator++();
00082                         fvec4SIMD& operator--();
00083 
00086 
00087                         
00088                         
00089                         
00090                         
00091                         
00092                         
00093                         
00094                         
00095                         
00096                         
00097                         
00098                         
00099 
00101                         
00102 
00103                         
00104                         
00105                         
00106                         
00107                         
00108                         
00109                 };
00110 
00111         }
00112 
00113         namespace gtx{
00115         namespace simd_vec4
00116         {
00117                 typedef detail::fvec4SIMD vec4SIMD;
00118 
00119         }
00120         }
00121 }
00122 
00123 #define GLM_GTX_simd_vec4               namespace gtx::simd_vec4;
00124 #ifndef GLM_GTX_GLOBAL
00125 namespace glm {using GLM_GTX_simd_vec4;}
00126 #endif//GLM_GTX_GLOBAL
00127 
00128 #include "simd_vec4.inl"
00129 
00130 #endif//glm_gtx_simd_vec4