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 #pragma once
00030
00031 #include "../fwd.hpp"
00032 #include "type_vec3.hpp"
00033 #include "type_vec4.hpp"
00034 #include "type_mat.hpp"
00035 #if GLM_HAS_INITIALIZER_LISTS
00036 # include <initializer_list>
00037 #endif
00038 #if GLM_HAS_RVALUE_REFERENCES
00039 # include <algorithm>
00040 #endif
00041 #include <limits>
00042 #include <cstddef>
00043
00044 namespace glm{
00045 namespace detail
00046 {
00047 template <typename T, precision P>
00048 struct tmat3x4
00049 {
00050 enum ctor{_null};
00051 typedef T value_type;
00052 typedef std::size_t size_type;
00053 typedef tvec4<T, P> col_type;
00054 typedef tvec3<T, P> row_type;
00055 typedef tmat3x4<T, P> type;
00056 typedef tmat4x3<T, P> transpose_type;
00057
00058 GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
00059
00060 private:
00061
00062 col_type value[3];
00063
00064 public:
00065
00066 GLM_FUNC_DECL tmat3x4();
00067 GLM_FUNC_DECL tmat3x4(tmat3x4<T, P> const & m);
00068 template <precision Q>
00069 GLM_FUNC_DECL tmat3x4(tmat3x4<T, Q> const & m);
00070
00071 GLM_FUNC_DECL explicit tmat3x4(
00072 ctor Null);
00073 GLM_FUNC_DECL explicit tmat3x4(
00074 T const & s);
00075 GLM_FUNC_DECL tmat3x4(
00076 T const & x0, T const & y0, T const & z0, T const & w0,
00077 T const & x1, T const & y1, T const & z1, T const & w1,
00078 T const & x2, T const & y2, T const & z2, T const & w2);
00079 GLM_FUNC_DECL tmat3x4(
00080 col_type const & v0,
00081 col_type const & v1,
00082 col_type const & v2);
00083
00085
00086 template<
00087 typename X1, typename Y1, typename Z1, typename W1,
00088 typename X2, typename Y2, typename Z2, typename W2,
00089 typename X3, typename Y3, typename Z3, typename W3>
00090 GLM_FUNC_DECL tmat3x4(
00091 X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
00092 X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,
00093 X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3);
00094
00095 template <typename V1, typename V2, typename V3>
00096 GLM_FUNC_DECL tmat3x4(
00097 tvec4<V1, P> const & v1,
00098 tvec4<V2, P> const & v2,
00099 tvec4<V3, P> const & v3);
00100
00101
00102 template <typename U, precision Q>
00103 GLM_FUNC_DECL explicit tmat3x4(tmat3x4<U, Q> const & m);
00104
00105 GLM_FUNC_DECL explicit tmat3x4(tmat2x2<T, P> const & x);
00106 GLM_FUNC_DECL explicit tmat3x4(tmat3x3<T, P> const & x);
00107 GLM_FUNC_DECL explicit tmat3x4(tmat4x4<T, P> const & x);
00108 GLM_FUNC_DECL explicit tmat3x4(tmat2x3<T, P> const & x);
00109 GLM_FUNC_DECL explicit tmat3x4(tmat3x2<T, P> const & x);
00110 GLM_FUNC_DECL explicit tmat3x4(tmat2x4<T, P> const & x);
00111 GLM_FUNC_DECL explicit tmat3x4(tmat4x2<T, P> const & x);
00112 GLM_FUNC_DECL explicit tmat3x4(tmat4x3<T, P> const & x);
00113
00114
00115 GLM_FUNC_DECL col_type & operator[](length_t i);
00116 GLM_FUNC_DECL col_type const & operator[](length_t i) const;
00117
00118 GLM_FUNC_DECL tmat3x4<T, P> & operator= (tmat3x4<T, P> const & m);
00119 template <typename U>
00120 GLM_FUNC_DECL tmat3x4<T, P> & operator= (tmat3x4<U, P> const & m);
00121 template <typename U>
00122 GLM_FUNC_DECL tmat3x4<T, P> & operator+= (U s);
00123 template <typename U>
00124 GLM_FUNC_DECL tmat3x4<T, P> & operator+= (tmat3x4<U, P> const & m);
00125 template <typename U>
00126 GLM_FUNC_DECL tmat3x4<T, P> & operator-= (U s);
00127 template <typename U>
00128 GLM_FUNC_DECL tmat3x4<T, P> & operator-= (tmat3x4<U, P> const & m);
00129 template <typename U>
00130 GLM_FUNC_DECL tmat3x4<T, P> & operator*= (U s);
00131 template <typename U>
00132 GLM_FUNC_DECL tmat3x4<T, P> & operator/= (U s);
00133
00135
00136
00137 GLM_FUNC_DECL tmat3x4<T, P> & operator++ ();
00138 GLM_FUNC_DECL tmat3x4<T, P> & operator-- ();
00139 GLM_FUNC_DECL tmat3x4<T, P> operator++(int);
00140 GLM_FUNC_DECL tmat3x4<T, P> operator--(int);
00141 };
00142
00143
00144 template <typename T, precision P>
00145 GLM_FUNC_DECL tmat3x4<T, P> operator+ (
00146 tmat3x4<T, P> const & m,
00147 T const & s);
00148
00149 template <typename T, precision P>
00150 GLM_FUNC_DECL tmat3x4<T, P> operator+ (
00151 tmat3x4<T, P> const & m1,
00152 tmat3x4<T, P> const & m2);
00153
00154 template <typename T, precision P>
00155 GLM_FUNC_DECL tmat3x4<T, P> operator- (
00156 tmat3x4<T, P> const & m,
00157 T const & s);
00158
00159 template <typename T, precision P>
00160 GLM_FUNC_DECL tmat3x4<T, P> operator- (
00161 tmat3x4<T, P> const & m1,
00162 tmat3x4<T, P> const & m2);
00163
00164 template <typename T, precision P>
00165 GLM_FUNC_DECL tmat3x4<T, P> operator* (
00166 tmat3x4<T, P> const & m,
00167 T const & s);
00168
00169 template <typename T, precision P>
00170 GLM_FUNC_DECL tmat3x4<T, P> operator* (
00171 T const & s,
00172 tmat3x4<T, P> const & m);
00173
00174 template <typename T, precision P>
00175 GLM_FUNC_DECL typename tmat3x4<T, P>::col_type operator* (
00176 tmat3x4<T, P> const & m,
00177 typename tmat3x4<T, P>::row_type const & v);
00178
00179 template <typename T, precision P>
00180 GLM_FUNC_DECL typename tmat3x4<T, P>::row_type operator* (
00181 typename tmat3x4<T, P>::col_type const & v,
00182 tmat3x4<T, P> const & m);
00183
00184 template <typename T, precision P>
00185 GLM_FUNC_DECL tmat4x4<T, P> operator* (
00186 tmat3x4<T, P> const & m1,
00187 tmat4x3<T, P> const & m2);
00188
00189 template <typename T, precision P>
00190 GLM_FUNC_DECL tmat2x4<T, P> operator* (
00191 tmat3x4<T, P> const & m1,
00192 tmat2x3<T, P> const & m2);
00193
00194 template <typename T, precision P>
00195 GLM_FUNC_DECL tmat3x4<T, P> operator* (
00196 tmat3x4<T, P> const & m1,
00197 tmat3x3<T, P> const & m2);
00198
00199 template <typename T, precision P>
00200 GLM_FUNC_DECL tmat3x4<T, P> operator/ (
00201 tmat3x4<T, P> const & m,
00202 T const & s);
00203
00204 template <typename T, precision P>
00205 GLM_FUNC_DECL tmat3x4<T, P> operator/ (
00206 T const & s,
00207 tmat3x4<T, P> const & m);
00208
00209
00210 template <typename T, precision P>
00211 GLM_FUNC_DECL tmat3x4<T, P> const operator-(
00212 tmat3x4<T, P> const & m);
00213
00214 }
00215 }
00216
00217 #ifndef GLM_EXTERNAL_TEMPLATE
00218 #include "type_mat3x4.inl"
00219 #endif