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_mat3x4
00030 #define glm_core_type_mat3x4
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 
00051         
00052         
00053         template <typename T> 
00054         struct tmat3x4
00055         {
00056                 enum ctor{null};
00057                 typedef T value_type;
00058                 typedef std::size_t size_type;
00059                 typedef tvec4<T> col_type;
00060                 typedef tvec3<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 tmat3x4<T> type;
00066                 typedef tmat4x3<T> transpose_type;
00067 
00068         private:
00069                 
00070                 col_type value[3];
00071 
00072         public:
00073                 
00074                 GLM_FUNC_DECL tmat3x4();
00075                 GLM_FUNC_DECL tmat3x4(tmat3x4 const & m);
00076 
00077                 GLM_FUNC_DECL explicit tmat3x4(
00078                         ctor Null);
00079                 GLM_FUNC_DECL explicit tmat3x4(
00080                         value_type const & s);
00081                 GLM_FUNC_DECL explicit tmat3x4(
00082                         value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
00083                         value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1,
00084                         value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2);
00085                 GLM_FUNC_DECL explicit tmat3x4(
00086                         col_type const & v0, 
00087                         col_type const & v1,
00088                         col_type const & v2);
00089 
00091                 
00092                 template <typename U> 
00093                 GLM_FUNC_DECL explicit tmat3x4(
00094             U const & x);
00095                         
00096                 template 
00097         <
00098             typename X1, typename Y1, typename Z1, typename W1, 
00099             typename X2, typename Y2, typename Z2, typename W2, 
00100             typename X3, typename Y3, typename Z3, typename W3 
00101         > 
00102                 GLM_FUNC_DECL explicit tmat3x4(
00103             X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, 
00104             X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, 
00105             X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3);
00106                         
00107                 template <typename V1, typename V2, typename V3> 
00108                 GLM_FUNC_DECL explicit tmat3x4(
00109             tvec4<V1> const & v1, 
00110             tvec4<V2> const & v2,
00111             tvec4<V3> const & v3);
00112             
00113                 
00114                 template <typename U> 
00115                 GLM_FUNC_DECL explicit tmat3x4(tmat3x4<U> const & m);
00116 
00117                 GLM_FUNC_DECL explicit tmat3x4(tmat2x2<T> const & x);
00118                 GLM_FUNC_DECL explicit tmat3x4(tmat3x3<T> const & x);
00119                 GLM_FUNC_DECL explicit tmat3x4(tmat4x4<T> const & x);
00120                 GLM_FUNC_DECL explicit tmat3x4(tmat2x3<T> const & x);
00121                 GLM_FUNC_DECL explicit tmat3x4(tmat3x2<T> const & x);
00122                 GLM_FUNC_DECL explicit tmat3x4(tmat2x4<T> const & x);
00123                 GLM_FUNC_DECL explicit tmat3x4(tmat4x2<T> const & x);
00124                 GLM_FUNC_DECL explicit tmat3x4(tmat4x3<T> const & x);
00125 
00126                 
00127                 col_type & operator[](size_type i);
00128                 col_type const & operator[](size_type i) const;
00129 
00130                 
00131                 GLM_FUNC_DECL tmat3x4<T> & operator=  (tmat3x4<T> const & m);
00132                 template <typename U> 
00133                 GLM_FUNC_DECL tmat3x4<T> & operator=  (tmat3x4<U> const & m);
00134                 template <typename U> 
00135                 GLM_FUNC_DECL tmat3x4<T> & operator+= (U const & s);
00136                 template <typename U> 
00137                 GLM_FUNC_DECL tmat3x4<T> & operator+= (tmat3x4<U> const & m);
00138                 template <typename U> 
00139                 GLM_FUNC_DECL tmat3x4<T> & operator-= (U const & s);
00140                 template <typename U> 
00141                 GLM_FUNC_DECL tmat3x4<T> & operator-= (tmat3x4<U> const & m);
00142                 template <typename U> 
00143                 GLM_FUNC_DECL tmat3x4<T> & operator*= (U const & s);
00144                 template <typename U> 
00145                 GLM_FUNC_DECL tmat3x4<T> & operator*= (tmat3x4<U> const & m);
00146                 template <typename U> 
00147                 GLM_FUNC_DECL tmat3x4<T> & operator/= (U const & s);
00148 
00149                 GLM_FUNC_DECL tmat3x4<T> & operator++ ();
00150                 GLM_FUNC_DECL tmat3x4<T> & operator-- ();
00151         };
00152 
00153         
00154         template <typename T> 
00155         tmat3x4<T> operator+ (
00156                 tmat3x4<T> const & m, 
00157                 typename tmat3x4<T>::value_type const & s);
00158             
00159         template <typename T> 
00160         tmat3x4<T> operator+ (
00161                 tmat3x4<T> const & m1, 
00162                 tmat3x4<T> const & m2);
00163             
00164         template <typename T> 
00165         tmat3x4<T> operator- (
00166                 tmat3x4<T> const & m, 
00167                 typename tmat3x4<T>::value_type const & s);
00168 
00169         template <typename T> 
00170         tmat3x4<T> operator- (
00171                 tmat3x4<T> const & m1, 
00172                 tmat3x4<T> const & m2);
00173 
00174         template <typename T> 
00175         tmat3x4<T> operator* (
00176                 tmat3x4<T> const & m, 
00177                 typename tmat3x4<T>::value_type const & s);
00178 
00179         template <typename T> 
00180         tmat3x4<T> operator* (
00181                 typename tmat3x4<T>::value_type const & s, 
00182                 tmat3x4<T> const & m);
00183 
00184         template <typename T>
00185         typename tmat3x4<T>::col_type operator* (
00186                 tmat3x4<T> const & m, 
00187                 typename tmat3x4<T>::row_type const & v);
00188 
00189         template <typename T> 
00190         typename tmat3x4<T>::row_type operator* (
00191                 typename tmat3x4<T>::col_type const & v, 
00192                 tmat3x4<T> const & m);
00193 
00194         template <typename T>
00195         tmat4x4<T> operator* (
00196                 tmat3x4<T> const & m1, 
00197                 tmat4x3<T> const & m2);
00198                 
00199         template <typename T>
00200         tmat2x4<T> operator* (
00201                 tmat3x4<T> const & m1, 
00202                 tmat2x3<T> const & m2);
00203                 
00204         template <typename T>
00205         tmat3x4<T> operator* (
00206                 tmat3x4<T> const & m1, 
00207                 tmat3x3<T> const & m2);
00208 
00209         template <typename T> 
00210         tmat3x4<T> operator/ (
00211                 tmat3x4<T> const & m, 
00212                 typename tmat3x4<T>::value_type const & s);
00213 
00214         template <typename T> 
00215         tmat3x4<T> operator/ (
00216                 typename tmat3x4<T>::value_type const & s, 
00217                 tmat3x4<T> const & m);
00218 
00219         
00220         template <typename T> 
00221         tmat3x4<T> const operator-  (
00222                 tmat3x4<T> const & m);
00223 
00224         template <typename T> 
00225         tmat3x4<T> const operator-- (
00226                 tmat3x4<T> const & m, 
00227                 int);
00228 
00229         template <typename T> 
00230         tmat3x4<T> const operator++ (
00231                 tmat3x4<T> const & m, 
00232                 int);
00233 
00234 }
00235 
00238 
00244         typedef detail::tmat3x4<lowp_float>             lowp_mat3x4;
00245 
00251         typedef detail::tmat3x4<mediump_float>  mediump_mat3x4;
00252 
00258         typedef detail::tmat3x4<highp_float>    highp_mat3x4;
00259 
00261 }
00262 
00263 #ifndef GLM_EXTERNAL_TEMPLATE
00264 #include "type_mat3x4.inl"
00265 #endif
00266 
00267 #endif //glm_core_type_mat3x4