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_mat3x3
00030 #define glm_core_type_mat3x3
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 tmat3x3
00055         {
00056                 enum ctor{null};
00057                 typedef T value_type;
00058                 typedef std::size_t size_type;
00059                 typedef tvec3<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 tmat3x3<T> type;
00066                 typedef tmat3x3<T> transpose_type;
00067 
00068         public:
00071                 GLM_FUNC_DECL tmat3x3<T> _inverse() const;
00073         
00074         private:
00075                 
00076                 col_type value[3];
00077 
00078         public:
00079                 
00080                 GLM_FUNC_DECL tmat3x3();
00081                 GLM_FUNC_DECL tmat3x3(tmat3x3 const & m);
00082 
00083                 GLM_FUNC_DECL explicit tmat3x3(
00084                         ctor Null);
00085                 GLM_FUNC_DECL explicit tmat3x3(
00086                         value_type const & s);
00087                 GLM_FUNC_DECL explicit tmat3x3(
00088                         value_type const & x0, value_type const & y0, value_type const & z0,
00089                         value_type const & x1, value_type const & y1, value_type const & z1,
00090                         value_type const & x2, value_type const & y2, value_type const & z2);
00091                 GLM_FUNC_DECL explicit tmat3x3(
00092                         col_type const & v0, 
00093                         col_type const & v1,
00094                         col_type const & v2);
00095 
00097                 
00098                 template <typename U> 
00099                 GLM_FUNC_DECL explicit tmat3x3(
00100             U const & x);
00101                         
00102                 template 
00103         <
00104             typename X1, typename Y1, typename Z1, 
00105             typename X2, typename Y2, typename Z2, 
00106             typename X3, typename Y3, typename Z3
00107         > 
00108                 GLM_FUNC_DECL explicit tmat3x3(
00109             X1 const & x1, Y1 const & y1, Z1 const & z1, 
00110             X2 const & x2, Y2 const & y2, Z2 const & z2, 
00111             X3 const & x3, Y3 const & y3, Z3 const & z3);
00112                         
00113                 template <typename V1, typename V2, typename V3> 
00114                 GLM_FUNC_DECL explicit tmat3x3(
00115             tvec3<V1> const & v1, 
00116             tvec3<V2> const & v2,
00117             tvec3<V3> const & v3);
00118             
00119                 
00120                 template <typename U> 
00121                 GLM_FUNC_DECL explicit tmat3x3(tmat3x3<U> const & m);
00122 
00123                 GLM_FUNC_DECL explicit tmat3x3(tmat2x2<T> const & x);
00124                 GLM_FUNC_DECL explicit tmat3x3(tmat4x4<T> const & x);
00125                 GLM_FUNC_DECL explicit tmat3x3(tmat2x3<T> const & x);
00126                 GLM_FUNC_DECL explicit tmat3x3(tmat3x2<T> const & x);
00127                 GLM_FUNC_DECL explicit tmat3x3(tmat2x4<T> const & x);
00128                 GLM_FUNC_DECL explicit tmat3x3(tmat4x2<T> const & x);
00129                 GLM_FUNC_DECL explicit tmat3x3(tmat3x4<T> const & x);
00130                 GLM_FUNC_DECL explicit tmat3x3(tmat4x3<T> const & x);
00131 
00132                 
00133                 GLM_FUNC_DECL col_type & operator[](size_type i);
00134                 GLM_FUNC_DECL col_type const & operator[](size_type i) const;
00135 
00136                 
00137                 GLM_FUNC_DECL tmat3x3<T>& operator=  (tmat3x3<T> const & m);
00138                 template <typename U> 
00139                 GLM_FUNC_DECL tmat3x3<T>& operator=  (tmat3x3<U> const & m);
00140                 template <typename U> 
00141                 GLM_FUNC_DECL tmat3x3<T>& operator+= (U const & s);
00142                 template <typename U> 
00143                 GLM_FUNC_DECL tmat3x3<T>& operator+= (tmat3x3<U> const & m);
00144                 template <typename U> 
00145                 GLM_FUNC_DECL tmat3x3<T>& operator-= (U const & s);
00146                 template <typename U> 
00147                 GLM_FUNC_DECL tmat3x3<T>& operator-= (tmat3x3<U> const & m);
00148                 template <typename U> 
00149                 GLM_FUNC_DECL tmat3x3<T>& operator*= (U const & s);
00150                 template <typename U> 
00151                 GLM_FUNC_DECL tmat3x3<T>& operator*= (tmat3x3<U> const & m);
00152                 template <typename U> 
00153                 GLM_FUNC_DECL tmat3x3<T>& operator/= (U const & s);
00154                 template <typename U> 
00155                 GLM_FUNC_DECL tmat3x3<T>& operator/= (tmat3x3<U> const & m);
00156                 GLM_FUNC_DECL tmat3x3<T>& operator++ ();
00157                 GLM_FUNC_DECL tmat3x3<T>& operator-- ();
00158         };
00159 
00160         
00161         template <typename T> 
00162         tmat3x3<T> operator+ (
00163                 tmat3x3<T> const & m, 
00164                 typename tmat3x3<T>::value_type const & s);
00165 
00166         template <typename T> 
00167         tmat3x3<T> operator+ (
00168                 typename tmat3x3<T>::value_type const & s, 
00169                 tmat3x3<T> const & m);
00170 
00171         template <typename T> 
00172         tmat3x3<T> operator+ (
00173                 tmat3x3<T> const & m1, 
00174                 tmat3x3<T> const & m2);
00175             
00176         template <typename T> 
00177         tmat3x3<T> operator- (
00178                 tmat3x3<T> const & m, 
00179                 typename tmat3x3<T>::value_type const & s);
00180 
00181         template <typename T> 
00182         tmat3x3<T> operator- (
00183                 typename tmat3x3<T>::value_type const & s, 
00184                 tmat3x3<T> const & m);
00185 
00186         template <typename T> 
00187         tmat3x3<T> operator- (
00188                 tmat3x3<T> const & m1, 
00189                 tmat3x3<T> const & m2);
00190 
00191         template <typename T> 
00192         tmat3x3<T> operator* (
00193                 tmat3x3<T> const & m, 
00194                 typename tmat3x3<T>::value_type const & s);
00195 
00196         template <typename T> 
00197         tmat3x3<T> operator* (
00198                 typename tmat3x3<T>::value_type const & s, 
00199                 tmat3x3<T> const & m);
00200 
00201         template <typename T> 
00202         typename tmat3x3<T>::col_type operator* (
00203                 tmat3x3<T> const & m, 
00204                 typename tmat3x3<T>::row_type const & v);
00205 
00206         template <typename T> 
00207         typename tmat3x3<T>::row_type operator* (
00208                 typename tmat3x3<T>::col_type const & v, 
00209                 tmat3x3<T> const & m);
00210 
00211         template <typename T> 
00212         tmat3x3<T> operator* (
00213                 tmat3x3<T> const & m1, 
00214                 tmat3x3<T> const & m2);
00215                 
00216         template <typename T>
00217         tmat2x3<T> operator* (
00218                 tmat3x3<T> const & m1, 
00219                 tmat2x3<T> const & m2);
00220                 
00221         template <typename T>
00222         tmat4x3<T> operator* (
00223                 tmat3x3<T> const & m1, 
00224                 tmat4x3<T> const & m2);
00225 
00226         template <typename T> 
00227         tmat3x3<T> operator/ (
00228                 tmat3x3<T> const & m, 
00229                 typename tmat3x3<T>::value_type const & s);
00230 
00231         template <typename T> 
00232         tmat3x3<T> operator/ (
00233                 typename tmat3x3<T>::value_type const & s, 
00234                 tmat3x3<T> const & m);
00235 
00236         template <typename T> 
00237         typename tmat3x3<T>::col_type operator/ (
00238                 tmat3x3<T> const & m, 
00239                 typename tmat3x3<T>::row_type const & v);
00240 
00241         template <typename T> 
00242         typename tmat3x3<T>::row_type operator/ (
00243                 typename tmat3x3<T>::col_type const & v, 
00244                 tmat3x3<T> const & m);
00245 
00246         template <typename T> 
00247         tmat3x3<T> operator/ (
00248                 tmat3x3<T> const & m1, 
00249                 tmat3x3<T> const & m2);
00250 
00251         
00252         template <typename T> 
00253         tmat3x3<T> const operator-  (
00254                 tmat3x3<T> const & m);
00255 
00256         template <typename T> 
00257         tmat3x3<T> const operator-- (
00258                 tmat3x3<T> const & m, 
00259                 int);
00260 
00261         template <typename T> 
00262         tmat3x3<T> const operator++ (
00263                 tmat3x3<T> const & m, 
00264                 int);
00265 
00266 } 
00267 
00270 
00276         typedef detail::tmat3x3<lowp_float>             lowp_mat3;
00277         
00283         typedef detail::tmat3x3<mediump_float>  mediump_mat3;
00284         
00290         typedef detail::tmat3x3<highp_float>    highp_mat3;
00291 
00297         typedef detail::tmat3x3<lowp_float>             lowp_mat3x3;
00298 
00304         typedef detail::tmat3x3<mediump_float>  mediump_mat3x3;
00305 
00311         typedef detail::tmat3x3<highp_float>    highp_mat3x3;
00312 
00314 }
00315 
00316 #ifndef GLM_EXTERNAL_TEMPLATE
00317 #include "type_mat3x3.inl"
00318 #endif
00319 
00320 #endif //glm_core_type_mat3x3