00001
00002
00004
00005
00006
00007
00009
00010 #ifndef glm_core_type_gentype3
00011 #define glm_core_type_gentype3
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 namespace detail
00021 {
00022 template <typename T> struct tref2;
00023 template <typename T> struct tref3;
00024 template <typename T> struct tref4;
00025 template <typename T> struct tvec2;
00026 template <typename T> struct tvec4;
00027
00030 template <typename T>
00031 struct tvec3
00032 {
00033 enum ctor{null};
00034
00035 typedef T value_type;
00036 typedef std::size_t size_type;
00037 GLM_FUNC_DECL size_type length() const;
00038 static GLM_FUNC_DECL size_type value_size();
00039
00040 typedef tvec3<T> type;
00041 typedef tvec3<bool> bool_type;
00042
00044
00045
00046 # if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
00047 value_type x, y, z;
00048 # elif(GLM_COMPONENT == GLM_COMPONENT_MS_EXT)
00049 union
00050 {
00051 struct{value_type r, g, b;};
00052 struct{value_type s, t, p;};
00053 struct{value_type x, y, z;};
00054 };
00055 # else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
00056 union {value_type x, r, s;};
00057 union {value_type y, g, t;};
00058 union {value_type z, b, p;};
00059 # endif//GLM_COMPONENT
00060
00062
00063
00064 GLM_FUNC_DECL value_type & operator[](size_type i);
00065 GLM_FUNC_DECL value_type const & operator[](size_type i) const;
00066
00068
00069
00070 GLM_FUNC_DECL tvec3();
00071 GLM_FUNC_DECL tvec3(tvec3<T> const & v);
00072
00074
00075
00076 GLM_FUNC_DECL explicit tvec3(
00077 ctor);
00078 GLM_FUNC_DECL explicit tvec3(
00079 value_type const & s);
00080 GLM_FUNC_DECL explicit tvec3(
00081 value_type const & s1,
00082 value_type const & s2,
00083 value_type const & s3);
00084
00086
00087
00089 template <typename U>
00090 GLM_FUNC_DECL explicit tvec3(
00091 U const & x);
00093 template <typename U, typename V, typename W>
00094 GLM_FUNC_DECL explicit tvec3(
00095 U const & x,
00096 V const & y,
00097 W const & z);
00098
00100
00101
00103 template <typename A, typename B>
00104 GLM_FUNC_DECL explicit tvec3(tvec2<A> const & v, B const & s);
00106 template <typename A, typename B>
00107 GLM_FUNC_DECL explicit tvec3(A const & s, tvec2<B> const & v);
00109 template <typename U>
00110 GLM_FUNC_DECL explicit tvec3(tvec3<U> const & v);
00112 template <typename U>
00113 GLM_FUNC_DECL explicit tvec3(tvec4<U> const & v);
00114
00116
00117
00118 GLM_FUNC_DECL tvec3(tref3<T> const & r);
00119
00120 template <typename A, typename B>
00121 GLM_FUNC_DECL explicit tvec3(tref2<A> const & v, B const & s);
00122
00123 template <typename A, typename B>
00124 GLM_FUNC_DECL explicit tvec3(A const & s, tref2<B> const & v);
00125
00127
00128
00129 GLM_FUNC_DECL tvec3<T> & operator= (tvec3<T> const & v);
00130 template <typename U>
00131 GLM_FUNC_DECL tvec3<T> & operator= (tvec3<U> const & v);
00132
00133 template <typename U>
00134 GLM_FUNC_DECL tvec3<T> & operator+=(U const & s);
00135 template <typename U>
00136 GLM_FUNC_DECL tvec3<T> & operator+=(tvec3<U> const & v);
00137 template <typename U>
00138 GLM_FUNC_DECL tvec3<T> & operator-=(U const & s);
00139 template <typename U>
00140 GLM_FUNC_DECL tvec3<T> & operator-=(tvec3<U> const & v);
00141 template <typename U>
00142 GLM_FUNC_DECL tvec3<T> & operator*=(U const & s);
00143 template <typename U>
00144 GLM_FUNC_DECL tvec3<T> & operator*=(tvec3<U> const & v);
00145 template <typename U>
00146 GLM_FUNC_DECL tvec3<T> & operator/=(U const & s);
00147 template <typename U>
00148 GLM_FUNC_DECL tvec3<T> & operator/=(tvec3<U> const & v);
00149 GLM_FUNC_DECL tvec3<T> & operator++();
00150 GLM_FUNC_DECL tvec3<T> & operator--();
00151
00153
00154
00155 template <typename U>
00156 GLM_FUNC_DECL tvec3<T> & operator%= (U const & s);
00157 template <typename U>
00158 GLM_FUNC_DECL tvec3<T> & operator%= (tvec3<U> const & v);
00159 template <typename U>
00160 GLM_FUNC_DECL tvec3<T> & operator&= (U const & s);
00161 template <typename U>
00162 GLM_FUNC_DECL tvec3<T> & operator&= (tvec3<U> const & v);
00163 template <typename U>
00164 GLM_FUNC_DECL tvec3<T> & operator|= (U const & s);
00165 template <typename U>
00166 GLM_FUNC_DECL tvec3<T> & operator|= (tvec3<U> const & v);
00167 template <typename U>
00168 GLM_FUNC_DECL tvec3<T> & operator^= (U const & s);
00169 template <typename U>
00170 GLM_FUNC_DECL tvec3<T> & operator^= (tvec3<U> const & v);
00171 template <typename U>
00172 GLM_FUNC_DECL tvec3<T> & operator<<=(U const & s);
00173 template <typename U>
00174 GLM_FUNC_DECL tvec3<T> & operator<<=(tvec3<U> const & v);
00175 template <typename U>
00176 GLM_FUNC_DECL tvec3<T> & operator>>=(U const & s);
00177 template <typename U>
00178 GLM_FUNC_DECL tvec3<T> & operator>>=(tvec3<U> const & v);
00179
00181
00182
00183 GLM_FUNC_DECL value_type swizzle(comp X) const;
00184 GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
00185 GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
00186 GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
00187 GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
00188 GLM_FUNC_DECL tref3<T> swizzle(comp X, comp Y, comp Z);
00189 };
00190
00191 template <typename T>
00192 struct tref3
00193 {
00194 GLM_FUNC_DECL tref3(T & x, T & y, T & z);
00195 GLM_FUNC_DECL tref3(tref3<T> const & r);
00196 GLM_FUNC_DECL tref3(tvec3<T> const & v);
00197
00198 GLM_FUNC_DECL tref3<T> & operator= (tref3<T> const & r);
00199 GLM_FUNC_DECL tref3<T> & operator= (tvec3<T> const & v);
00200
00201 GLM_FUNC_DECL tvec3<T> operator() ();
00202
00203 T & x;
00204 T & y;
00205 T & z;
00206 };
00207
00208 GLM_DETAIL_IS_VECTOR(tvec3);
00209 }
00210
00211 namespace core{
00212 namespace type{
00213 namespace precision
00214 {
00219 typedef detail::tvec3<highp_float> highp_vec3;
00220
00225 typedef detail::tvec3<mediump_float> mediump_vec3;
00226
00231 typedef detail::tvec3<lowp_float> lowp_vec3;
00232
00237 typedef detail::tvec3<highp_int> highp_ivec3;
00238
00243 typedef detail::tvec3<mediump_int> mediump_ivec3;
00244
00249 typedef detail::tvec3<lowp_int> lowp_ivec3;
00250
00255 typedef detail::tvec3<highp_uint> highp_uvec3;
00256
00261 typedef detail::tvec3<mediump_uint> mediump_uvec3;
00262
00267 typedef detail::tvec3<lowp_uint> lowp_uvec3;
00268
00269 }
00270 }
00271 }
00272 }
00273
00274 #ifndef GLM_EXTERNAL_TEMPLATE
00275 #include "type_vec3.inl"
00276 #endif//GLM_EXTERNAL_TEMPLATE
00277
00278 #endif//glm_core_type_gentype3