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 : 2008-08-30 00006 // Licence : This source is under MIT License 00007 // File : glm/core/type_mat4x4.hpp 00009 00010 #ifndef glm_core_type_mat4x4 00011 #define glm_core_type_mat4x4 00012 00013 #include "type_mat.hpp" 00014 00015 namespace glm 00016 { 00017 namespace test 00018 { 00019 void main_mat4x4(); 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 tmat4x4 00041 { 00042 enum ctor{null}; 00043 typedef T value_type; 00044 typedef std::size_t size_type; 00045 typedef tvec4<T> col_type; 00046 typedef tvec4<T> row_type; 00047 static size_type col_size(); 00048 static size_type row_size(); 00049 00050 typedef tmat4x4<T> type; 00051 typedef tmat4x4<T> transpose_type; 00052 00053 public: 00054 // Implementation detail 00055 tmat4x4<T> _inverse() const; 00056 00057 private: 00058 // Data 00059 col_type value[4]; 00060 00061 public: 00062 // Constructors 00063 tmat4x4(); 00064 tmat4x4(tmat4x4 const & m); 00065 00066 explicit tmat4x4( 00067 ctor Null); 00068 explicit tmat4x4( 00069 value_type const & x); 00070 explicit tmat4x4( 00071 value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0, 00072 value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1, 00073 value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2, 00074 value_type const & x3, value_type const & y3, value_type const & z3, value_type const & w3); 00075 explicit tmat4x4( 00076 col_type const & v0, 00077 col_type const & v1, 00078 col_type const & v2, 00079 col_type const & v3); 00080 00081 // Conversions 00082 template <typename U> 00083 explicit tmat4x4(tmat4x4<U> const & m); 00084 00085 explicit tmat4x4(tmat2x2<T> const & x); 00086 explicit tmat4x4(tmat3x3<T> const & x); 00087 explicit tmat4x4(tmat2x3<T> const & x); 00088 explicit tmat4x4(tmat3x2<T> const & x); 00089 explicit tmat4x4(tmat2x4<T> const & x); 00090 explicit tmat4x4(tmat4x2<T> const & x); 00091 explicit tmat4x4(tmat3x4<T> const & x); 00092 explicit tmat4x4(tmat4x3<T> const & x); 00093 00094 // Accesses 00095 col_type & operator[](size_type i); 00096 col_type const & operator[](size_type i) const; 00097 00098 // Unary updatable operators 00099 tmat4x4<T> & operator= (tmat4x4<T> const & m); 00100 template <typename U> 00101 tmat4x4<T> & operator= (tmat4x4<U> const & m); 00102 template <typename U> 00103 tmat4x4<T> & operator+= (U const & s); 00104 template <typename U> 00105 tmat4x4<T> & operator+= (tmat4x4<U> const & m); 00106 template <typename U> 00107 tmat4x4<T> & operator-= (U const & s); 00108 template <typename U> 00109 tmat4x4<T> & operator-= (tmat4x4<U> const & m); 00110 template <typename U> 00111 tmat4x4<T> & operator*= (U const & s); 00112 template <typename U> 00113 tmat4x4<T> & operator*= (tmat4x4<U> const & m); 00114 template <typename U> 00115 tmat4x4<T> & operator/= (U const & s); 00116 template <typename U> 00117 tmat4x4<T> & operator/= (tmat4x4<U> const & m); 00118 tmat4x4<T> & operator++ (); 00119 tmat4x4<T> & operator-- (); 00120 }; 00121 00122 // Binary operators 00123 template <typename T> 00124 tmat4x4<T> operator+ ( 00125 tmat4x4<T> const & m, 00126 typename tmat4x4<T>::value_type const & s); 00127 00128 template <typename T> 00129 tmat4x4<T> operator+ ( 00130 typename tmat4x4<T>::value_type const & s, 00131 tmat4x4<T> const & m); 00132 00133 template <typename T> 00134 tmat4x4<T> operator+ ( 00135 tmat4x4<T> const & m1, 00136 tmat4x4<T> const & m2); 00137 00138 template <typename T> 00139 tmat4x4<T> operator- ( 00140 tmat4x4<T> const & m, 00141 typename tmat4x4<T>::value_type const & s); 00142 00143 template <typename T> 00144 tmat4x4<T> operator- ( 00145 typename tmat4x4<T>::value_type const & s, 00146 tmat4x4<T> const & m); 00147 00148 template <typename T> 00149 tmat4x4<T> operator- ( 00150 tmat4x4<T> const & m1, 00151 tmat4x4<T> const & m2); 00152 00153 template <typename T> 00154 tmat4x4<T> operator* ( 00155 tmat4x4<T> const & m, 00156 typename tmat4x4<T>::value_type const & s); 00157 00158 template <typename T> 00159 tmat4x4<T> operator* ( 00160 typename tmat4x4<T>::value_type const & s, 00161 tmat4x4<T> const & m); 00162 00163 template <typename T> 00164 typename tmat4x4<T>::col_type operator* ( 00165 tmat4x4<T> const & m, 00166 typename tmat4x4<T>::row_type const & v); 00167 00168 template <typename T> 00169 typename tmat4x4<T>::row_type operator* ( 00170 typename tmat4x4<T>::col_type const & v, 00171 tmat4x4<T> const & m); 00172 00173 template <typename T> 00174 tmat4x4<T> operator* ( 00175 tmat4x4<T> const & m1, 00176 tmat4x4<T> const & m2); 00177 00178 template <typename T> 00179 tmat4x4<T> operator/ ( 00180 tmat4x4<T> const & m, 00181 typename tmat4x4<T>::value_type const & s); 00182 00183 template <typename T> 00184 tmat4x4<T> operator/ ( 00185 typename tmat4x4<T>::value_type const & s, 00186 tmat4x4<T> const & m); 00187 00188 template <typename T> 00189 typename tmat4x4<T>::col_type operator/ ( 00190 tmat4x4<T> const & m, 00191 typename tmat4x4<T>::row_type const & v); 00192 00193 template <typename T> 00194 typename tmat4x4<T>::row_type operator/ ( 00195 typename tmat4x4<T>::col_type & v, 00196 tmat4x4<T> const & m); 00197 00198 template <typename T> 00199 tmat4x4<T> operator/ ( 00200 tmat4x4<T> const & m1, 00201 tmat4x4<T> const & m2); 00202 00203 // Unary constant operators 00204 template <typename T> 00205 tmat4x4<T> const operator- ( 00206 tmat4x4<T> const & m); 00207 00208 template <typename T> 00209 tmat4x4<T> const operator-- ( 00210 tmat4x4<T> const & m, int); 00211 00212 template <typename T> 00213 tmat4x4<T> const operator++ ( 00214 tmat4x4<T> const & m, int); 00215 00216 } //namespace detail 00217 00218 namespace core{ 00219 namespace type{ 00220 00221 namespace precision 00222 { 00226 typedef detail::tmat4x4<lowp_float> lowp_mat4x4; 00230 typedef detail::tmat4x4<mediump_float> mediump_mat4x4; 00234 typedef detail::tmat4x4<highp_float> highp_mat4x4; 00235 } 00236 //namespace precision 00237 00238 }//namespace type 00239 }//namespace core 00240 } //namespace glm 00241 00242 #include "type_mat4x4.inl" 00243 00244 #endif //glm_core_type_mat4x4