GLM Version 0.9.0
|
00001 00002 // OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net) 00004 // Created : 2005-01-27 00005 // Updated : 2010-02-03 00006 // Licence : This source is under MIT License 00007 // File : glm/core/type_mat3x3.hpp 00009 00010 #ifndef glm_core_type_mat3x3 00011 #define glm_core_type_mat3x3 00012 00013 #include "type_mat.hpp" 00014 00015 namespace glm 00016 { 00017 namespace test 00018 { 00019 void main_mat3x3(); 00020 }//namespace test 00021 00022 namespace detail 00023 { 00024 template <typename T> struct tvec1; 00025 template <typename T> struct tvec2; 00026 template <typename T> struct tvec3; 00027 template <typename T> struct tvec4; 00028 template <typename T> struct tmat2x2; 00029 template <typename T> struct tmat2x3; 00030 template <typename T> struct tmat2x4; 00031 template <typename T> struct tmat3x2; 00032 template <typename T> struct tmat3x3; 00033 template <typename T> struct tmat3x4; 00034 template <typename T> struct tmat4x2; 00035 template <typename T> struct tmat4x3; 00036 template <typename T> struct tmat4x4; 00037 00039 template <typename T> 00040 struct tmat3x3 00041 { 00042 enum ctor{null}; 00043 typedef T value_type; 00044 typedef std::size_t size_type; 00045 typedef tvec3<T> col_type; 00046 typedef tvec3<T> row_type; 00047 static size_type col_size(); 00048 static size_type row_size(); 00049 00050 typedef tmat3x3<T> type; 00051 typedef tmat3x3<T> transpose_type; 00052 00053 public: 00054 // Implementation detail 00055 tmat3x3<T> _inverse() const; 00056 00057 private: 00058 // Data 00059 col_type value[3]; 00060 00061 public: 00062 // Constructors 00063 tmat3x3(); 00064 tmat3x3(tmat3x3 const & m); 00065 00066 explicit tmat3x3( 00067 ctor Null); 00068 explicit tmat3x3( 00069 value_type const & s); 00070 explicit tmat3x3( 00071 value_type const & x0, value_type const & y0, value_type const & z0, 00072 value_type const & x1, value_type const & y1, value_type const & z1, 00073 value_type const & x2, value_type const & y2, value_type const & z2); 00074 explicit tmat3x3( 00075 col_type const & v0, 00076 col_type const & v1, 00077 col_type const & v2); 00078 00079 // Conversions 00080 template <typename U> 00081 explicit tmat3x3(tmat3x3<U> const & m); 00082 00083 explicit tmat3x3(tmat2x2<T> const & x); 00084 explicit tmat3x3(tmat4x4<T> const & x); 00085 explicit tmat3x3(tmat2x3<T> const & x); 00086 explicit tmat3x3(tmat3x2<T> const & x); 00087 explicit tmat3x3(tmat2x4<T> const & x); 00088 explicit tmat3x3(tmat4x2<T> const & x); 00089 explicit tmat3x3(tmat3x4<T> const & x); 00090 explicit tmat3x3(tmat4x3<T> const & x); 00091 00092 // Accesses 00093 col_type & operator[](size_type i); 00094 col_type const & operator[](size_type i) const; 00095 00096 // Unary updatable operators 00097 tmat3x3<T>& operator= (tmat3x3<T> const & m); 00098 template <typename U> 00099 tmat3x3<T>& operator= (tmat3x3<U> const & m); 00100 template <typename U> 00101 tmat3x3<T>& operator+= (U const & s); 00102 template <typename U> 00103 tmat3x3<T>& operator+= (tmat3x3<U> const & m); 00104 template <typename U> 00105 tmat3x3<T>& operator-= (U const & s); 00106 template <typename U> 00107 tmat3x3<T>& operator-= (tmat3x3<U> const & m); 00108 template <typename U> 00109 tmat3x3<T>& operator*= (U const & s); 00110 template <typename U> 00111 tmat3x3<T>& operator*= (tmat3x3<U> const & m); 00112 template <typename U> 00113 tmat3x3<T>& operator/= (U const & s); 00114 template <typename U> 00115 tmat3x3<T>& operator/= (tmat3x3<U> const & m); 00116 tmat3x3<T>& operator++ (); 00117 tmat3x3<T>& operator-- (); 00118 }; 00119 00120 // Binary operators 00121 template <typename T> 00122 tmat3x3<T> operator+ ( 00123 tmat3x3<T> const & m, 00124 typename tmat3x3<T>::value_type const & s); 00125 00126 template <typename T> 00127 tmat3x3<T> operator+ ( 00128 typename tmat3x3<T>::value_type const & s, 00129 tmat3x3<T> const & m); 00130 00131 template <typename T> 00132 tmat3x3<T> operator+ ( 00133 tmat3x3<T> const & m1, 00134 tmat3x3<T> const & m2); 00135 00136 template <typename T> 00137 tmat3x3<T> operator- ( 00138 tmat3x3<T> const & m, 00139 typename tmat3x3<T>::value_type const & s); 00140 00141 template <typename T> 00142 tmat3x3<T> operator- ( 00143 typename tmat3x3<T>::value_type const & s, 00144 tmat3x3<T> const & m); 00145 00146 template <typename T> 00147 tmat3x3<T> operator- ( 00148 tmat3x3<T> const & m1, 00149 tmat3x3<T> const & m2); 00150 00151 template <typename T> 00152 tmat3x3<T> operator* ( 00153 tmat3x3<T> const & m, 00154 typename tmat3x3<T>::value_type const & s); 00155 00156 template <typename T> 00157 tmat3x3<T> operator* ( 00158 typename tmat3x3<T>::value_type const & s, 00159 tmat3x3<T> const & m); 00160 00161 template <typename T> 00162 typename tmat3x3<T>::col_type operator* ( 00163 tmat3x3<T> const & m, 00164 typename tmat3x3<T>::row_type const & v); 00165 00166 template <typename T> 00167 typename tmat3x3<T>::row_type operator* ( 00168 typename tmat3x3<T>::col_type const & v, 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 typename tmat3x3<T>::col_type operator/ ( 00188 tmat3x3<T> const & m, 00189 typename tmat3x3<T>::row_type const & v); 00190 00191 template <typename T> 00192 typename tmat3x3<T>::row_type operator/ ( 00193 typename tmat3x3<T>::col_type const & v, 00194 tmat3x3<T> const & m); 00195 00196 template <typename T> 00197 tmat3x3<T> operator/ ( 00198 tmat3x3<T> const & m1, 00199 tmat3x3<T> const & m2); 00200 00201 // Unary constant operators 00202 template <typename T> 00203 tmat3x3<T> const operator- ( 00204 tmat3x3<T> const & m); 00205 00206 template <typename T> 00207 tmat3x3<T> const operator-- ( 00208 tmat3x3<T> const & m, 00209 int); 00210 00211 template <typename T> 00212 tmat3x3<T> const operator++ ( 00213 tmat3x3<T> const & m, 00214 int); 00215 00216 } //namespace detail 00217 00218 namespace core{ 00219 namespace type{ 00220 00221 namespace precision 00222 { 00226 typedef detail::tmat3x3<lowp_float> lowp_mat3x3; 00230 typedef detail::tmat3x3<mediump_float> mediump_mat3x3; 00234 typedef detail::tmat3x3<highp_float> highp_mat3x3; 00235 } 00236 //namespace precision 00237 00238 }//namespace type 00239 }//namespace core 00240 } //namespace glm 00241 00242 #include "type_mat3x3.inl" 00243 00244 #endif //glm_core_type_mat3x3