00001
00002
00004
00005
00006
00007
00009
00010 #ifndef glm_core_type_gentype4
00011 #define glm_core_type_gentype4
00012
00013 #include "type_vec.hpp"
00014 #include "type_float.hpp"
00015 #include "type_int.hpp"
00016 #include "type_size.hpp"
00017 #include "_swizzle.hpp"
00018
00019 namespace glm
00020 {
00021 namespace test
00022 {
00023 void main_vec4();
00024 }
00025
00026 namespace detail
00027 {
00028 template <typename T> struct tref2;
00029 template <typename T> struct tref3;
00030 template <typename T> struct tref4;
00031 template <typename T> struct tvec2;
00032 template <typename T> struct tvec3;
00033
00036 template <typename T>
00037 struct tvec4
00038 {
00039 enum ctor{null};
00040
00041 typedef T value_type;
00042 typedef std::size_t size_type;
00043 GLM_FUNC_DECL size_type length() const;
00044 static GLM_FUNC_DECL size_type value_size();
00045
00046 typedef tvec4<T> type;
00047 typedef tvec4<bool> bool_type;
00048
00050
00051
00052 # if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
00053 value_type x, y, z, w;
00054 # elif(GLM_COMPONENT == GLM_COMPONENT_MS_EXT)
00055 union
00056 {
00057 struct{value_type x, y, z, w;};
00058 struct{value_type r, g, b, a;};
00059 struct{value_type s, t, p, q;};
00060 };
00061 # else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
00062 union {value_type x, r, s;};
00063 union {value_type y, g, t;};
00064 union {value_type z, b, p;};
00065 union {value_type w, a, q;};
00066 # endif//GLM_COMPONENT
00067
00069
00070
00071 GLM_FUNC_DECL value_type & operator[](size_type i);
00072 GLM_FUNC_DECL value_type const & operator[](size_type i) const;
00073
00075
00076
00077 GLM_FUNC_DECL tvec4();
00078 GLM_FUNC_DECL tvec4(type const & v);
00079
00081
00082
00083 GLM_FUNC_DECL explicit tvec4(
00084 ctor);
00085 GLM_FUNC_DECL explicit tvec4(
00086 value_type const & s);
00087 GLM_FUNC_DECL explicit tvec4(
00088 value_type const & s0,
00089 value_type const & s1,
00090 value_type const & s2,
00091 value_type const & s3);
00092
00094
00095
00096 GLM_FUNC_DECL tvec4(tref4<T> const & r);
00097
00099
00100
00102 template <typename U>
00103 GLM_FUNC_DECL explicit tvec4(
00104 U const & x);
00106 template <typename A, typename B, typename C, typename D>
00107 GLM_FUNC_DECL explicit tvec4(
00108 A const & x,
00109 B const & y,
00110 C const & z,
00111 D const & w);
00112
00114
00115
00117 template <typename A, typename B, typename C>
00118 GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v, B const & s1, C const & s2);
00120 template <typename A, typename B, typename C>
00121 GLM_FUNC_DECL explicit tvec4(A const & s1, tvec2<B> const & v, C const & s2);
00123 template <typename A, typename B, typename C>
00124 GLM_FUNC_DECL explicit tvec4(A const & s1, B const & s2, tvec2<C> const & v);
00126 template <typename A, typename B>
00127 GLM_FUNC_DECL explicit tvec4(tvec3<A> const & v, B const & s);
00129 template <typename A, typename B>
00130 GLM_FUNC_DECL explicit tvec4(A const & s, tvec3<B> const & v);
00132 template <typename A, typename B>
00133 GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v1, tvec2<B> const & v2);
00135 template <typename U>
00136 GLM_FUNC_DECL explicit tvec4(tvec4<U> const & v);
00137
00139
00140
00141 GLM_FUNC_DECL tvec4<T> & operator= (tvec4<T> const & v);
00142 template <typename U>
00143 GLM_FUNC_DECL tvec4<T> & operator= (tvec4<U> const & v);
00144
00145 template <typename U>
00146 GLM_FUNC_DECL tvec4<T> & operator+=(U const & s);
00147 template <typename U>
00148 GLM_FUNC_DECL tvec4<T> & operator+=(tvec4<U> const & v);
00149 template <typename U>
00150 GLM_FUNC_DECL tvec4<T> & operator-=(U const & s);
00151 template <typename U>
00152 GLM_FUNC_DECL tvec4<T> & operator-=(tvec4<U> const & v);
00153 template <typename U>
00154 GLM_FUNC_DECL tvec4<T> & operator*=(U const & s);
00155 template <typename U>
00156 GLM_FUNC_DECL tvec4<T> & operator*=(tvec4<U> const & v);
00157 template <typename U>
00158 GLM_FUNC_DECL tvec4<T> & operator/=(U const & s);
00159 template <typename U>
00160 GLM_FUNC_DECL tvec4<T> & operator/=(tvec4<U> const & v);
00161 GLM_FUNC_DECL tvec4<T> & operator++();
00162 GLM_FUNC_DECL tvec4<T> & operator--();
00163
00165
00166
00167 template <typename U>
00168 GLM_FUNC_DECL tvec4<T> & operator%= (U const & s);
00169 template <typename U>
00170 GLM_FUNC_DECL tvec4<T> & operator%= (tvec4<U> const & v);
00171 template <typename U>
00172 GLM_FUNC_DECL tvec4<T> & operator&= (U const & s);
00173 template <typename U>
00174 GLM_FUNC_DECL tvec4<T> & operator&= (tvec4<U> const & v);
00175 template <typename U>
00176 GLM_FUNC_DECL tvec4<T> & operator|= (U const & s);
00177 template <typename U>
00178 GLM_FUNC_DECL tvec4<T> & operator|= (tvec4<U> const & v);
00179 template <typename U>
00180 GLM_FUNC_DECL tvec4<T> & operator^= (U const & s);
00181 template <typename U>
00182 GLM_FUNC_DECL tvec4<T> & operator^= (tvec4<U> const & v);
00183 template <typename U>
00184 GLM_FUNC_DECL tvec4<T> & operator<<=(U const & s);
00185 template <typename U>
00186 GLM_FUNC_DECL tvec4<T> & operator<<=(tvec4<U> const & v);
00187 template <typename U>
00188 GLM_FUNC_DECL tvec4<T> & operator>>=(U const & s);
00189 template <typename U>
00190 GLM_FUNC_DECL tvec4<T> & operator>>=(tvec4<U> const & v);
00191
00193
00194
00195 GLM_FUNC_DECL value_type swizzle(comp X) const;
00196 GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
00197 GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
00198 GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
00199 GLM_FUNC_DECL tref4<T> swizzle(comp X, comp Y, comp Z, comp W);
00200 };
00201
00202 template <typename T>
00203 struct tref4
00204 {
00205 GLM_FUNC_DECL tref4(T & x, T & y, T & z, T & w);
00206 GLM_FUNC_DECL tref4(tref4<T> const & r);
00207 GLM_FUNC_DECL tref4(tvec4<T> const & v);
00208
00209 GLM_FUNC_DECL tref4<T> & operator= (tref4<T> const & r);
00210 GLM_FUNC_DECL tref4<T> & operator= (tvec4<T> const & v);
00211
00212 T & x;
00213 T & y;
00214 T & z;
00215 T & w;
00216 };
00217
00218 GLM_DETAIL_IS_VECTOR(tvec4);
00219 }
00220
00221 namespace core{
00222 namespace type{
00223
00225
00226
00227 namespace precision
00228 {
00233 typedef detail::tvec4<highp_float> highp_vec4;
00238 typedef detail::tvec4<mediump_float> mediump_vec4;
00243 typedef detail::tvec4<lowp_float> lowp_vec4;
00244
00249 typedef detail::tvec4<highp_int> highp_ivec4;
00254 typedef detail::tvec4<mediump_int> mediump_ivec4;
00259 typedef detail::tvec4<lowp_int> lowp_ivec4;
00260
00265 typedef detail::tvec4<highp_uint> highp_uvec4;
00270 typedef detail::tvec4<mediump_uint> mediump_uvec4;
00275 typedef detail::tvec4<lowp_uint> lowp_uvec4;
00276 }
00277
00278
00279 }
00280 }
00281
00282 using namespace core::type;
00283
00284 }
00285
00286 #ifndef GLM_EXTERNAL_TEMPLATE
00287 #include "type_vec4.inl"
00288 #endif
00289
00290 #endif//glm_core_type_gentype4