00001
00002
00004
00005
00006
00007
00009
00010 #ifndef glm_core_type_gentype2
00011 #define glm_core_type_gentype2
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_vec2();
00024 }
00025
00026
00027 namespace detail
00028 {
00029 template <typename T> struct tref2;
00030 template <typename T> struct tref3;
00031 template <typename T> struct tref4;
00032 template <typename T> struct tvec3;
00033 template <typename T> struct tvec4;
00034
00037 template <typename T>
00038 struct tvec2
00039 {
00040 enum ctor{null};
00041
00042 typedef T value_type;
00043 typedef std::size_t size_type;
00044 static size_type value_size();
00045
00046 typedef tvec2<T> type;
00047 typedef tvec2<bool> bool_type;
00048
00050
00051
00052 # if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
00053 value_type x, y;
00054 # elif(GLM_COMPONENT == GLM_COMPONENT_MS_EXT)
00055 union
00056 {
00057 struct{value_type x, y;};
00058 struct{value_type r, g;};
00059 struct{value_type s, t;};
00060 };
00061 # else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
00062 union {value_type x, r, s;};
00063 union {value_type y, g, t;};
00064 # endif//GLM_COMPONENT
00065
00067
00068
00069 value_type & operator[](size_type i);
00070 value_type const & operator[](size_type i) const;
00071
00073
00074
00075 tvec2();
00076 tvec2(tvec2<T> const & v);
00077
00079
00080
00081 explicit tvec2(
00082 ctor);
00083 explicit tvec2(
00084 value_type const & s);
00085 explicit tvec2(
00086 value_type const & s1,
00087 value_type const & s2);
00088
00090
00091
00092 tvec2(tref2<T> const & r);
00093
00095
00096
00098 template <typename U>
00099 explicit tvec2(
00100 U const & x);
00102 template <typename U, typename V>
00103 explicit tvec2(
00104 U const & x,
00105 V const & y);
00106
00108
00109
00111 template <typename U>
00112 explicit tvec2(tvec2<U> const & v);
00114 template <typename U>
00115 explicit tvec2(tvec3<U> const & v);
00117 template <typename U>
00118 explicit tvec2(tvec4<U> const & v);
00119
00121
00122
00123 tvec2<T> & operator= (tvec2<T> const & v);
00124 template <typename U>
00125 tvec2<T> & operator= (tvec2<U> const & v);
00126
00127 template <typename U>
00128 tvec2<T> & operator+=(U const & s);
00129 template <typename U>
00130 tvec2<T> & operator+=(tvec2<U> const & v);
00131 template <typename U>
00132 tvec2<T> & operator-=(U const & s);
00133 template <typename U>
00134 tvec2<T> & operator-=(tvec2<U> const & v);
00135 template <typename U>
00136 tvec2<T> & operator*=(U const & s);
00137 template <typename U>
00138 tvec2<T> & operator*=(tvec2<U> const & v);
00139 template <typename U>
00140 tvec2<T> & operator/=(U const & s);
00141 template <typename U>
00142 tvec2<T> & operator/=(tvec2<U> const & v);
00143 tvec2<T> & operator++();
00144 tvec2<T> & operator--();
00145
00147
00148
00149 template <typename U>
00150 tvec2<T> & operator%= (U const & s);
00151 template <typename U>
00152 tvec2<T> & operator%= (tvec2<U> const & v);
00153 template <typename U>
00154 tvec2<T> & operator&= (U const & s);
00155 template <typename U>
00156 tvec2<T> & operator&= (tvec2<U> const & v);
00157 template <typename U>
00158 tvec2<T> & operator|= (U const & s);
00159 template <typename U>
00160 tvec2<T> & operator|= (tvec2<U> const & v);
00161 template <typename U>
00162 tvec2<T> & operator^= (U const & s);
00163 template <typename U>
00164 tvec2<T> & operator^= (tvec2<U> const & v);
00165 template <typename U>
00166 tvec2<T> & operator<<=(U const & s);
00167 template <typename U>
00168 tvec2<T> & operator<<=(tvec2<U> const & v);
00169 template <typename U>
00170 tvec2<T> & operator>>=(U const & s);
00171 template <typename U>
00172 tvec2<T> & operator>>=(tvec2<U> const & v);
00173
00175
00176
00177 value_type swizzle(comp X) const;
00178 tvec2<T> swizzle(comp X, comp Y) const;
00179 tvec3<T> swizzle(comp X, comp Y, comp Z) const;
00180 tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
00181 tref2<T> swizzle(comp X, comp Y);
00182 };
00183
00184 template <typename T>
00185 struct tref2
00186 {
00187 tref2(T & x, T & y);
00188 tref2(tref2<T> const & r);
00189 tref2(tvec2<T> const & v);
00190
00191 tref2<T> & operator= (tref2<T> const & r);
00192 tref2<T> & operator= (tvec2<T> const & v);
00193
00194 T& x;
00195 T& y;
00196 };
00197
00198 GLM_DETAIL_IS_VECTOR(tvec2);
00199
00200 }
00201
00202 namespace core{
00203 namespace type{
00204
00205 namespace precision
00206 {
00211 typedef detail::tvec2<highp_float> highp_vec2;
00216 typedef detail::tvec2<mediump_float> mediump_vec2;
00221 typedef detail::tvec2<lowp_float> lowp_vec2;
00222
00227 typedef detail::tvec2<highp_int> highp_ivec2;
00232 typedef detail::tvec2<mediump_int> mediump_ivec2;
00237 typedef detail::tvec2<lowp_int> lowp_ivec2;
00238
00243 typedef detail::tvec2<highp_uint> highp_uvec2;
00248 typedef detail::tvec2<mediump_uint> mediump_uvec2;
00253 typedef detail::tvec2<lowp_uint> lowp_uvec2;
00254 }
00255
00256
00257 }
00258 }
00259 }
00260
00261 #ifndef GLM_EXTERNAL_TEMPLATE
00262 #include "type_vec2.inl"
00263 #endif
00264
00265 #endif//glm_core_type_gentype2