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