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