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_mat4x2
00030 #define glm_core_type_mat4x2
00031 
00032 #include "type_mat.hpp"
00033 
00034 namespace glm{
00035 namespace detail
00036 {
00037         template <typename T> struct tvec1;
00038         template <typename T> struct tvec2;
00039         template <typename T> struct tvec3;
00040         template <typename T> struct tvec4;
00041         template <typename T> struct tmat2x2;
00042         template <typename T> struct tmat2x3;
00043         template <typename T> struct tmat2x4;
00044         template <typename T> struct tmat3x2;
00045         template <typename T> struct tmat3x3;
00046         template <typename T> struct tmat3x4;
00047         template <typename T> struct tmat4x2;
00048         template <typename T> struct tmat4x3;
00049         template <typename T> struct tmat4x4;
00050 
00053         template <typename T> 
00054         struct tmat4x2
00055         {
00056                 enum ctor{null};
00057                 typedef T value_type;
00058                 typedef std::size_t size_type;
00059                 typedef tvec2<T> col_type;
00060                 typedef tvec4<T> row_type;
00061         GLM_FUNC_DECL size_type length() const;
00062                 static GLM_FUNC_DECL size_type col_size();
00063                 static GLM_FUNC_DECL size_type row_size();
00064 
00065                 typedef tmat4x2<T> type;
00066                 typedef tmat2x4<T> transpose_type;
00067 
00068         private:
00069                 
00070                 col_type value[4];
00071 
00072         public:
00073                 
00074                 GLM_FUNC_DECL tmat4x2();
00075                 GLM_FUNC_DECL tmat4x2(tmat4x2 const & m);
00076 
00077                 GLM_FUNC_DECL explicit tmat4x2(
00078                         ctor Null);
00079                 GLM_FUNC_DECL explicit tmat4x2(
00080                         value_type const & x);
00081                 GLM_FUNC_DECL explicit tmat4x2(
00082                         value_type const & x0, value_type const & y0,
00083                         value_type const & x1, value_type const & y1,
00084                         value_type const & x2, value_type const & y2,
00085                         value_type const & x3, value_type const & y3);
00086                 GLM_FUNC_DECL explicit tmat4x2(
00087                         col_type const & v0, 
00088                         col_type const & v1,
00089                         col_type const & v2,
00090                         col_type const & v3);
00091             
00093                 
00094                 template <typename U> 
00095                 GLM_FUNC_DECL explicit tmat4x2(
00096             U const & x);
00097                         
00098                 template 
00099         <
00100             typename X1, typename Y1, 
00101             typename X2, typename Y2, 
00102             typename X3, typename Y3,
00103             typename X4, typename Y4
00104         > 
00105                 GLM_FUNC_DECL explicit tmat4x2(
00106             X1 const & x1, Y1 const & y1, 
00107             X2 const & x2, Y2 const & y2,
00108             X3 const & x3, Y3 const & y3,
00109             X4 const & x4, Y4 const & y4);
00110                         
00111                 template <typename V1, typename V2, typename V3, typename V4> 
00112                 GLM_FUNC_DECL explicit tmat4x2(
00113             tvec2<V1> const & v1, 
00114             tvec2<V2> const & v2,
00115             tvec2<V3> const & v3,
00116             tvec2<V4> const & v4);
00117             
00118                 
00119                 template <typename U> 
00120                 GLM_FUNC_DECL explicit tmat4x2(tmat4x2<U> const & m);
00121                         
00122                 GLM_FUNC_DECL explicit tmat4x2(tmat2x2<T> const & x);
00123                 GLM_FUNC_DECL explicit tmat4x2(tmat3x3<T> const & x);
00124                 GLM_FUNC_DECL explicit tmat4x2(tmat4x4<T> const & x);
00125                 GLM_FUNC_DECL explicit tmat4x2(tmat2x3<T> const & x);
00126                 GLM_FUNC_DECL explicit tmat4x2(tmat3x2<T> const & x);
00127                 GLM_FUNC_DECL explicit tmat4x2(tmat2x4<T> const & x);
00128                 GLM_FUNC_DECL explicit tmat4x2(tmat4x3<T> const & x);
00129                 GLM_FUNC_DECL explicit tmat4x2(tmat3x4<T> const & x);
00130 
00131                 
00132                 GLM_FUNC_DECL col_type & operator[](size_type i);
00133                 GLM_FUNC_DECL col_type const & operator[](size_type i) const;
00134 
00135                 
00136                 GLM_FUNC_DECL tmat4x2<T>& operator=  (tmat4x2<T> const & m);
00137                 template <typename U> 
00138                 GLM_FUNC_DECL tmat4x2<T>& operator=  (tmat4x2<U> const & m);
00139                 template <typename U> 
00140                 GLM_FUNC_DECL tmat4x2<T>& operator+= (U const & s);
00141                 template <typename U> 
00142                 GLM_FUNC_DECL tmat4x2<T>& operator+= (tmat4x2<U> const & m);
00143                 template <typename U> 
00144                 GLM_FUNC_DECL tmat4x2<T>& operator-= (U const & s);
00145                 template <typename U> 
00146                 GLM_FUNC_DECL tmat4x2<T>& operator-= (tmat4x2<U> const & m);
00147                 template <typename U> 
00148                 GLM_FUNC_DECL tmat4x2<T>& operator*= (U const & s);
00149                 template <typename U> 
00150                 GLM_FUNC_DECL tmat4x2<T>& operator*= (tmat4x2<U> const & m);
00151                 template <typename U> 
00152                 GLM_FUNC_DECL tmat4x2<T>& operator/= (U const & s);
00153 
00154                 GLM_FUNC_DECL tmat4x2<T>& operator++ ();
00155                 GLM_FUNC_DECL tmat4x2<T>& operator-- ();
00156         };
00157 
00158         
00159         template <typename T> 
00160         tmat4x2<T> operator+ (
00161                 tmat4x2<T> const & m, 
00162                 typename tmat4x2<T>::value_type const & s);
00163             
00164         template <typename T> 
00165         tmat4x2<T> operator+ (
00166                 tmat4x2<T> const & m1, 
00167                 tmat4x2<T> const & m2);
00168             
00169         template <typename T> 
00170         tmat4x2<T> operator- (
00171                 tmat4x2<T> const & m, 
00172                 typename tmat4x2<T>::value_type const & s);
00173 
00174         template <typename T> 
00175         tmat4x2<T> operator- (
00176                 tmat4x2<T> const & m1, 
00177                 tmat4x2<T> const & m2);
00178 
00179         template <typename T> 
00180         tmat4x2<T> operator* (
00181                 tmat4x2<T> const & m, 
00182                 typename tmat4x2<T>::value_type const & s);
00183 
00184         template <typename T> 
00185         tmat4x2<T> operator* (
00186                 typename tmat4x2<T>::value_type const & s, 
00187                 tmat4x2<T> const & m);
00188 
00189         template <typename T>
00190         typename tmat4x2<T>::col_type operator* (
00191                 tmat4x2<T> const & m, 
00192                 typename tmat4x2<T>::row_type const & v);
00193 
00194         template <typename T> 
00195         typename tmat4x2<T>::row_type operator* (
00196                 typename tmat4x2<T>::col_type const & v, 
00197                 tmat4x2<T> const & m);
00198 
00199         template <typename T>
00200         tmat3x2<T> operator* (
00201                 tmat4x2<T> const & m1, 
00202                 tmat3x4<T> const & m2);
00203                 
00204         template <typename T>
00205         tmat4x2<T> operator* (
00206                 tmat4x2<T> const & m1, 
00207                 tmat4x4<T> const & m2);
00208                 
00209         template <typename T>
00210         tmat2x3<T> operator* (
00211                 tmat4x3<T> const & m1, 
00212                 tmat2x4<T> const & m2);
00213 
00214         template <typename T> 
00215         tmat4x2<T> operator/ (
00216                 tmat4x2<T> const & m, 
00217                 typename tmat4x2<T>::value_type const & s);
00218 
00219         template <typename T> 
00220         tmat4x2<T> operator/ (
00221                 typename tmat4x2<T>::value_type const & s, 
00222                 tmat4x2<T> const & m);
00223 
00224         
00225         template <typename T> 
00226         tmat4x2<T> const operator-  (
00227                 tmat4x2<T> const & m);
00228 
00229         template <typename T> 
00230         tmat4x2<T> const operator-- (
00231                 tmat4x2<T> const & m, 
00232                 int);
00233 
00234         template <typename T> 
00235         tmat4x2<T> const operator++ (
00236                 tmat4x2<T> const & m, 
00237                 int);
00238 
00239 } 
00240 
00243 
00249         typedef detail::tmat4x2<lowp_float>             lowp_mat4x2;
00250 
00256         typedef detail::tmat4x2<mediump_float>  mediump_mat4x2;
00257 
00263         typedef detail::tmat4x2<highp_float>    highp_mat4x2;
00264 
00266 }
00267 
00268 #ifndef GLM_EXTERNAL_TEMPLATE
00269 #include "type_mat4x2.inl"
00270 #endif
00271 
00272 #endif //glm_core_type_mat4x2