- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List

type_vec3.hpp
Go to the documentation of this file.

    00001
    00002
    00003
    00004
    00005
    00006
    00007
    00008
    00009
    00010
    00011
    00012
    00013
    00014
    00015
    00016
    00017
    00018
    00019
    00020
    00021
    00022
    00023
    00024
    00025
    00026
    00027
    00028
    00029 #ifndef glm_core_type_gentype3
    00030 #define glm_core_type_gentype3
    00031
    00032 #include "type_vec.hpp"
    00033 #include "type_float.hpp"
    00034 #include "type_int.hpp"
    00035 #include "type_size.hpp"
    00036 #include "_swizzle.hpp"
    00037
    00038 namespace glm{
    00039 namespace detail
    00040 {
    00041         template <typename T> struct tref2;
    00042         template <typename T> struct tref3;
    00043         template <typename T> struct tref4;
    00044         template <typename T> struct tvec2;
    00045         template <typename T> struct tvec4;
    00046
    00047         // Basic 3D vector type.
    00048         // \ingroup core_template
    00049         template <typename T>
    00050         struct tvec3
    00051         {
    00052                 enum ctor{null};
    00053
    00054                 typedef T value_type;
    00055                 typedef std::size_t size_type;
    00056                 GLM_FUNC_DECL size_type length() const;
    00057
    00058                 typedef tvec3<T> type;
    00059                 typedef tvec3<bool> bool_type;
    00060
    00062                 // Data
    00063
    00064 #       if(GLM_COMPONENT == GLM_COMPONENT_CXX11)
    00065                 union
    00066                 {
    00067 #               if(defined(GLM_SWIZZLE))
    00068                         _GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, x, y, z)
    00069                         _GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, r, g, b)
    00070                         _GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, s, t, p)
    00071                         _GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, x, y, z)
    00072                         _GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, r, g, b)
    00073                         _GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, s, t, p)
    00074                         _GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, x, y, z)
    00075                         _GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, r, g, b)
    00076                         _GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, s, t, p)
    00077 #               endif//(defined(GLM_SWIZZLE))
    00078
    00079                         struct{value_type r, g, b;};
    00080                         struct{value_type s, t, p;};
    00081                         struct{value_type x, y, z;};
    00082                 };
    00083 #       elif(GLM_COMPONENT == GLM_COMPONENT_CXX98)
    00084                 union {value_type x, r, s;};
    00085                 union {value_type y, g, t;};
    00086                 union {value_type z, b, p;};
    00087
    00088 #               if(defined(GLM_SWIZZLE))
    00089                         // Defines all he swizzle operator as functions
    00090                         GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, detail::tvec3, detail::tref2, detail::tref3)
    00091                         GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, detail::tvec3, detail::tvec2, detail::tvec3, detail::tvec4)
    00092 #               endif//(defined(GLM_SWIZZLE))
    00093 #       else //(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
    00094                 value_type x, y, z;
    00095
    00096 #               if(defined(GLM_SWIZZLE))
    00097                         // Defines all he swizzle operator as functions
    00098                         GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, detail::tvec3, detail::tref2, detail::tref3, x, y, z)
    00099                         GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, detail::tvec3, detail::tvec2, detail::tvec3, detail::tvec4, x, y, z)
    00100 #               endif//(defined(GLM_SWIZZLE))
    00101 #       endif//GLM_COMPONENT
    00102
    00104                 // Accesses
    00105
    00106                 GLM_FUNC_DECL value_type & operator[](size_type i);
    00107                 GLM_FUNC_DECL value_type const & operator[](size_type i) const;
    00108
    00110                 // Implicit basic constructors
    00111
    00112                 GLM_FUNC_DECL tvec3();
    00113                 GLM_FUNC_DECL tvec3(tvec3<T> const & v);
    00114
    00116                 // Explicit basic constructors
    00117
    00118                 GLM_FUNC_DECL explicit tvec3(
    00119                         ctor);
    00120                 GLM_FUNC_DECL explicit tvec3(
    00121                         value_type const & s);
    00122                 GLM_FUNC_DECL explicit tvec3(
    00123                         value_type const & s1,
    00124                         value_type const & s2,
    00125                         value_type const & s3);
    00126
    00128                 // Convertion scalar constructors
    00129
    00131                 template <typename U>
    00132                 GLM_FUNC_DECL explicit tvec3(
    00133                         U const & x);
    00135                 template <typename U, typename V, typename W>
    00136                 GLM_FUNC_DECL explicit tvec3(
    00137                         U const & x,
    00138                         V const & y,
    00139                         W const & z);
    00140
    00142                 // Convertion vector constructors
    00143
    00145                 template <typename A, typename B>
    00146                 GLM_FUNC_DECL explicit tvec3(tvec2<A> const & v, B const & s);
    00148                 template <typename A, typename B>
    00149                 GLM_FUNC_DECL explicit tvec3(A const & s, tvec2<B> const & v);
    00151                 template <typename U>
    00152                 GLM_FUNC_DECL explicit tvec3(tvec3<U> const & v);
    00154                 template <typename U>
    00155                 GLM_FUNC_DECL explicit tvec3(tvec4<U> const & v);
    00156
    00158                 // Swizzle constructors
    00159
    00160                 GLM_FUNC_DECL tvec3(tref3<T> const & r);
    00161
    00162                 template <typename A, typename B>
    00163                 GLM_FUNC_DECL explicit tvec3(tref2<A> const & v, B const & s);
    00164
    00165                 template <typename A, typename B>
    00166                 GLM_FUNC_DECL explicit tvec3(A const & s, tref2<B> const & v);
    00167
    00168         template <int E0, int E1, int E2>
    00169         GLM_FUNC_DECL tvec3(glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & that)
    00170         {
    00171             *this = that();
    00172         }
    00173
    00174         template <int E0, int E1>
    00175         GLM_FUNC_DECL tvec3(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & s)
    00176         {
    00177             *this = tvec3<T>(v(), s);
    00178         }
    00179
    00180         template <int E0, int E1>
    00181         GLM_FUNC_DECL tvec3(T const & s, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v)
    00182         {
    00183             *this = tvec3<T>(s, v());
    00184         }
    00185
    00187                 // Unary arithmetic operators
    00188
    00189                 GLM_FUNC_DECL tvec3<T> & operator= (tvec3<T> const & v);
    00190                 template <typename U>
    00191                 GLM_FUNC_DECL tvec3<T> & operator= (tvec3<U> const & v);
    00192
    00193                 template <typename U>
    00194                 GLM_FUNC_DECL tvec3<T> & operator+=(U const & s);
    00195                 template <typename U>
    00196                 GLM_FUNC_DECL tvec3<T> & operator+=(tvec3<U> const & v);
    00197                 template <typename U>
    00198                 GLM_FUNC_DECL tvec3<T> & operator-=(U const & s);
    00199                 template <typename U>
    00200                 GLM_FUNC_DECL tvec3<T> & operator-=(tvec3<U> const & v);
    00201                 template <typename U>
    00202                 GLM_FUNC_DECL tvec3<T> & operator*=(U const & s);
    00203                 template <typename U>
    00204                 GLM_FUNC_DECL tvec3<T> & operator*=(tvec3<U> const & v);
    00205                 template <typename U>
    00206                 GLM_FUNC_DECL tvec3<T> & operator/=(U const & s);
    00207                 template <typename U>
    00208                 GLM_FUNC_DECL tvec3<T> & operator/=(tvec3<U> const & v);
    00209                 GLM_FUNC_DECL tvec3<T> & operator++();
    00210                 GLM_FUNC_DECL tvec3<T> & operator--();
    00211
    00213                 // Unary bit operators
    00214
    00215                 template <typename U>
    00216                 GLM_FUNC_DECL tvec3<T> & operator%= (U const & s);
    00217                 template <typename U>
    00218                 GLM_FUNC_DECL tvec3<T> & operator%= (tvec3<U> const & v);
    00219                 template <typename U>
    00220                 GLM_FUNC_DECL tvec3<T> & operator&= (U const & s);
    00221                 template <typename U>
    00222                 GLM_FUNC_DECL tvec3<T> & operator&= (tvec3<U> const & v);
    00223                 template <typename U>
    00224                 GLM_FUNC_DECL tvec3<T> & operator|= (U const & s);
    00225                 template <typename U>
    00226                 GLM_FUNC_DECL tvec3<T> & operator|= (tvec3<U> const & v);
    00227                 template <typename U>
    00228                 GLM_FUNC_DECL tvec3<T> & operator^= (U const & s);
    00229                 template <typename U>
    00230                 GLM_FUNC_DECL tvec3<T> & operator^= (tvec3<U> const & v);
    00231                 template <typename U>
    00232                 GLM_FUNC_DECL tvec3<T> & operator<<=(U const & s);
    00233                 template <typename U>
    00234                 GLM_FUNC_DECL tvec3<T> & operator<<=(tvec3<U> const & v);
    00235                 template <typename U>
    00236                 GLM_FUNC_DECL tvec3<T> & operator>>=(U const & s);
    00237                 template <typename U>
    00238                 GLM_FUNC_DECL tvec3<T> & operator>>=(tvec3<U> const & v);
    00239
    00241                 // Swizzle operators
    00242
    00243                 GLM_FUNC_DECL value_type swizzle(comp X) const;
    00244                 GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
    00245                 GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
    00246                 GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
    00247                 GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
    00248                 GLM_FUNC_DECL tref3<T> swizzle(comp X, comp Y, comp Z);
    00249         };
    00250
    00251         template <typename T>
    00252         struct tref3
    00253         {
    00254                 GLM_FUNC_DECL tref3(T & x, T & y, T & z);
    00255                 GLM_FUNC_DECL tref3(tref3<T> const & r);
    00256                 GLM_FUNC_DECL explicit tref3(tvec3<T> const & v);
    00257
    00258                 GLM_FUNC_DECL tref3<T> & operator= (tref3<T> const & r);
    00259                 GLM_FUNC_DECL tref3<T> & operator= (tvec3<T> const & v);
    00260
    00261                 GLM_FUNC_DECL tvec3<T> operator() ();
    00262
    00263                 T & x;
    00264                 T & y;
    00265                 T & z;
    00266         };
    00267
    00268         GLM_DETAIL_IS_VECTOR(tvec3);
    00269 } //namespace detail
    00270
    00273
    00279         typedef detail::tvec3<highp_float>              highp_vec3;
    00280
    00286         typedef detail::tvec3<mediump_float>    mediump_vec3;
    00287
    00293         typedef detail::tvec3<lowp_float>               lowp_vec3;
    00294
    00300         typedef detail::tvec3<highp_int>                highp_ivec3;
    00301
    00307         typedef detail::tvec3<mediump_int>              mediump_ivec3;
    00308
    00314         typedef detail::tvec3<lowp_int>                 lowp_ivec3;
    00315
    00321         typedef detail::tvec3<highp_uint>               highp_uvec3;
    00322
    00328         typedef detail::tvec3<mediump_uint>             mediump_uvec3;
    00329
    00335         typedef detail::tvec3<lowp_uint>                lowp_uvec3;
    00336
    00338 }//namespace glm
    00339
    00340 #ifndef GLM_EXTERNAL_TEMPLATE
    00341 #include "type_vec3.inl"
    00342 #endif//GLM_EXTERNAL_TEMPLATE
    00343
    00344 #endif//glm_core_type_gentype3