type_mat4x3.hpp
00001 
00002 // OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
00004 // Created : 2006-08-04
00005 // Updated : 2010-02-11
00006 // Licence : This source is under MIT License
00007 // File    : glm/core/type_mat4x3.hpp
00009 
00010 #ifndef glm_core_type_mat4x3
00011 #define glm_core_type_mat4x3
00012 
00013 #include "type_mat.hpp"
00014 
00015 namespace glm{
00016 namespace detail
00017 {
00018         template <typename T> struct tvec1;
00019         template <typename T> struct tvec2;
00020         template <typename T> struct tvec3;
00021         template <typename T> struct tvec4;
00022         template <typename T> struct tmat2x2;
00023         template <typename T> struct tmat2x3;
00024         template <typename T> struct tmat2x4;
00025         template <typename T> struct tmat3x2;
00026         template <typename T> struct tmat3x3;
00027         template <typename T> struct tmat3x4;
00028         template <typename T> struct tmat4x2;
00029         template <typename T> struct tmat4x3;
00030         template <typename T> struct tmat4x4;
00031 
00034         template <typename T> 
00035         struct tmat4x3
00036         {
00037                 enum ctor{null};
00038                 typedef T value_type;
00039                 typedef std::size_t size_type;
00040                 typedef tvec3<T> col_type;
00041                 typedef tvec4<T> row_type;
00042                 static GLM_FUNC_DECL size_type col_size();
00043                 static GLM_FUNC_DECL size_type row_size();
00044 
00045                 typedef tmat4x3<T> type;
00046                 typedef tmat3x4<T> transpose_type;
00047 
00048         private:
00049                 // Data 
00050                 col_type value[4];
00051 
00052         public:
00053                 // Constructors
00054                 GLM_FUNC_DECL tmat4x3();
00055                 GLM_FUNC_DECL tmat4x3(tmat4x3 const & m);
00056 
00057                 GLM_FUNC_DECL explicit tmat4x3(
00058                         ctor Null);
00059                 GLM_FUNC_DECL explicit tmat4x3(
00060                         value_type const & x);
00061                 GLM_FUNC_DECL explicit tmat4x3(
00062                         value_type const & x0, value_type const & y0, value_type const & z0,
00063                         value_type const & x1, value_type const & y1, value_type const & z1,
00064                         value_type const & x2, value_type const & y2, value_type const & z2,
00065                         value_type const & x3, value_type const & y3, value_type const & z3);
00066                 GLM_FUNC_DECL explicit tmat4x3(
00067                         col_type const & v0, 
00068                         col_type const & v1,
00069                         col_type const & v2,
00070             col_type const & v3);
00071             
00073                 // Conversions
00074                 template <typename U> 
00075                 GLM_FUNC_DECL explicit tmat4x3(
00076             U const & x);
00077                         
00078                 template <
00079             typename X1, typename Y1, typename Z1, 
00080             typename X2, typename Y2, typename Z2, 
00081             typename X3, typename Y3, typename Z3, 
00082             typename X4, typename Y4, typename Z4> 
00083                 GLM_FUNC_DECL explicit tmat4x3(
00084             X1 const & x1, Y1 const & y1, Z1 const & z1, 
00085             X2 const & x2, Y2 const & y2, Z2 const & z2, 
00086             X3 const & x3, Y3 const & y3, Z3 const & z3, 
00087             X4 const & x4, Y4 const & y4, Z4 const & z4);
00088                         
00089                 template <typename V1, typename V2, typename V3, typename V4> 
00090                 GLM_FUNC_DECL explicit tmat4x3(
00091             tvec3<V1> const & v1, 
00092             tvec3<V2> const & v2,
00093             tvec3<V3> const & v3,
00094             tvec3<V4> const & v4);
00095             
00096                 // Matrix conversions
00097                 template <typename U> 
00098                 GLM_FUNC_DECL explicit tmat4x3(tmat4x3<U> const & m);
00099                         
00100                 GLM_FUNC_DECL explicit tmat4x3(tmat2x2<T> const & x);
00101                 GLM_FUNC_DECL explicit tmat4x3(tmat3x3<T> const & x);
00102                 GLM_FUNC_DECL explicit tmat4x3(tmat4x4<T> const & x);
00103                 GLM_FUNC_DECL explicit tmat4x3(tmat2x3<T> const & x);
00104                 GLM_FUNC_DECL explicit tmat4x3(tmat3x2<T> const & x);
00105                 GLM_FUNC_DECL explicit tmat4x3(tmat2x4<T> const & x);
00106                 GLM_FUNC_DECL explicit tmat4x3(tmat4x2<T> const & x);
00107                 GLM_FUNC_DECL explicit tmat4x3(tmat3x4<T> const & x);
00108 
00109                 // Accesses
00110                 col_type & operator[](size_type i);
00111                 col_type const & operator[](size_type i) const;
00112 
00113                 // Unary updatable operators
00114                 GLM_FUNC_DECL tmat4x3<T> & operator=  (tmat4x3<T> const & m);
00115                 template <typename U> 
00116                 GLM_FUNC_DECL tmat4x3<T> & operator=  (tmat4x3<U> const & m);
00117                 template <typename U> 
00118                 GLM_FUNC_DECL tmat4x3<T> & operator+= (U const & s);
00119                 template <typename U> 
00120                 GLM_FUNC_DECL tmat4x3<T> & operator+= (tmat4x3<U> const & m);
00121                 template <typename U> 
00122                 GLM_FUNC_DECL tmat4x3<T> & operator-= (U const & s);
00123                 template <typename U> 
00124                 GLM_FUNC_DECL tmat4x3<T> & operator-= (tmat4x3<U> const & m);
00125                 template <typename U> 
00126                 GLM_FUNC_DECL tmat4x3<T> & operator*= (U const & s);
00127                 template <typename U> 
00128                 GLM_FUNC_DECL tmat4x3<T> & operator*= (tmat4x3<U> const & m);
00129                 template <typename U> 
00130                 GLM_FUNC_DECL tmat4x3<T> & operator/= (U const & s);
00131 
00132                 GLM_FUNC_DECL tmat4x3<T> & operator++ ();
00133                 GLM_FUNC_DECL tmat4x3<T> & operator-- ();
00134         };
00135 
00136         // Binary operators
00137         template <typename T> 
00138         tmat4x3<T> operator+ (
00139                 tmat4x3<T> const & m, 
00140                 typename tmat4x3<T>::value_type const & s);
00141             
00142         template <typename T> 
00143         tmat4x3<T> operator+ (
00144                 tmat4x3<T> const & m1, 
00145                 tmat4x3<T> const & m2);
00146             
00147         template <typename T> 
00148         tmat4x3<T> operator- (
00149                 tmat4x3<T> const & m, 
00150                 typename tmat4x3<T>::value_type const & s);
00151 
00152         template <typename T> 
00153         tmat4x3<T> operator- (
00154                 tmat4x3<T> const & m1, 
00155                 tmat4x3<T> const & m2);
00156 
00157         template <typename T> 
00158         tmat4x3<T> operator* (
00159                 tmat4x3<T> const & m, 
00160                 typename tmat4x3<T>::value_type const & s);
00161 
00162         template <typename T> 
00163         tmat4x3<T> operator* (
00164                 typename tmat4x3<T>::value_type const & s, 
00165                 tmat4x3<T> const & m);
00166 
00167         template <typename T>
00168         typename tmat4x3<T>::col_type operator* (
00169                 tmat4x3<T> const & m, 
00170                 typename tmat4x3<T>::row_type const & v);
00171 
00172         template <typename T> 
00173         typename tmat4x3<T>::row_type operator* (
00174                 typename tmat4x3<T>::col_type const & v, 
00175                 tmat4x3<T> const & m);
00176 
00177         template <typename T> 
00178         tmat3x3<T> operator* (
00179                 tmat4x3<T> const & m1, 
00180                 tmat3x4<T> const & m2);
00181 
00182         template <typename T> 
00183         tmat4x3<T> operator/ (
00184                 tmat4x3<T> const & m, 
00185                 typename tmat4x3<T>::value_type const & s);
00186 
00187         template <typename T> 
00188         tmat4x3<T> operator/ (
00189                 typename tmat4x3<T>::value_type const & s, 
00190                 tmat4x3<T> const & m);
00191 
00192         // Unary constant operators
00193         template <typename T> 
00194         tmat4x3<T> const operator- (
00195                 tmat4x3<T> const & m);
00196 
00197         template <typename T> 
00198         tmat4x3<T> const operator-- (
00199                 tmat4x3<T> const & m, 
00200                 int);
00201 
00202         template <typename T> 
00203         tmat4x3<T> const operator++ (
00204                 tmat4x3<T> const & m, 
00205                 int);
00206 
00207 }//namespace detail
00208 
00209 namespace core{
00210 namespace type{
00211 namespace precision
00212 {
00217         typedef detail::tmat4x3<lowp_float>             lowp_mat4x3;
00218 
00223         typedef detail::tmat4x3<mediump_float>  mediump_mat4x3;
00224 
00229         typedef detail::tmat4x3<highp_float>    highp_mat4x3;
00230 
00231 }//namespace precision
00232 }//namespace type
00233 }//namespace core
00234 }//namespace glm
00235 
00236 #ifndef GLM_EXTERNAL_TEMPLATE
00237 #include "type_mat4x3.inl"
00238 #endif //GLM_EXTERNAL_TEMPLATE
00239 
00240 #endif//glm_core_type_mat4x3