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_vec2.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 tmat4x2
00049 {
00050 enum ctor{_null};
00051 typedef T value_type;
00052 typedef std::size_t size_type;
00053 typedef tvec2<T, P> col_type;
00054 typedef tvec4<T, P> row_type;
00055 typedef tmat4x2<T, P> type;
00056 typedef tmat2x4<T, P> transpose_type;
00057
00058 GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
00059
00060 private:
00061
00062 col_type value[4];
00063
00064 public:
00065
00066 GLM_FUNC_DECL tmat4x2();
00067 GLM_FUNC_DECL tmat4x2(tmat4x2<T, P> const & m);
00068 template <precision Q>
00069 GLM_FUNC_DECL tmat4x2(tmat4x2<T, Q> const & m);
00070
00071 GLM_FUNC_DECL explicit tmat4x2(
00072 ctor Null);
00073 GLM_FUNC_DECL explicit tmat4x2(
00074 T const & x);
00075 GLM_FUNC_DECL tmat4x2(
00076 T const & x0, T const & y0,
00077 T const & x1, T const & y1,
00078 T const & x2, T const & y2,
00079 T const & x3, T const & y3);
00080 GLM_FUNC_DECL tmat4x2(
00081 col_type const & v0,
00082 col_type const & v1,
00083 col_type const & v2,
00084 col_type const & v3);
00085
00087
00088
00089 template<
00090 typename X1, typename Y1,
00091 typename X2, typename Y2,
00092 typename X3, typename Y3,
00093 typename X4, typename Y4>
00094 GLM_FUNC_DECL tmat4x2(
00095 X1 const & x1, Y1 const & y1,
00096 X2 const & x2, Y2 const & y2,
00097 X3 const & x3, Y3 const & y3,
00098 X4 const & x4, Y4 const & y4);
00099
00100 template <typename V1, typename V2, typename V3, typename V4>
00101 GLM_FUNC_DECL tmat4x2(
00102 tvec2<V1, P> const & v1,
00103 tvec2<V2, P> const & v2,
00104 tvec2<V3, P> const & v3,
00105 tvec2<V4, P> const & v4);
00106
00107
00108 template <typename U, precision Q>
00109 GLM_FUNC_DECL explicit tmat4x2(tmat4x2<U, Q> const & m);
00110
00111 GLM_FUNC_DECL explicit tmat4x2(tmat2x2<T, P> const & x);
00112 GLM_FUNC_DECL explicit tmat4x2(tmat3x3<T, P> const & x);
00113 GLM_FUNC_DECL explicit tmat4x2(tmat4x4<T, P> const & x);
00114 GLM_FUNC_DECL explicit tmat4x2(tmat2x3<T, P> const & x);
00115 GLM_FUNC_DECL explicit tmat4x2(tmat3x2<T, P> const & x);
00116 GLM_FUNC_DECL explicit tmat4x2(tmat2x4<T, P> const & x);
00117 GLM_FUNC_DECL explicit tmat4x2(tmat4x3<T, P> const & x);
00118 GLM_FUNC_DECL explicit tmat4x2(tmat3x4<T, P> const & x);
00119
00120
00121 GLM_FUNC_DECL col_type & operator[](length_t i);
00122 GLM_FUNC_DECL col_type const & operator[](length_t i) const;
00123
00124 GLM_FUNC_DECL tmat4x2<T, P>& operator= (tmat4x2<T, P> const & m);
00125 template <typename U>
00126 GLM_FUNC_DECL tmat4x2<T, P>& operator= (tmat4x2<U, P> const & m);
00127 template <typename U>
00128 GLM_FUNC_DECL tmat4x2<T, P>& operator+= (U s);
00129 template <typename U>
00130 GLM_FUNC_DECL tmat4x2<T, P>& operator+= (tmat4x2<U, P> const & m);
00131 template <typename U>
00132 GLM_FUNC_DECL tmat4x2<T, P>& operator-= (U s);
00133 template <typename U>
00134 GLM_FUNC_DECL tmat4x2<T, P>& operator-= (tmat4x2<U, P> const & m);
00135 template <typename U>
00136 GLM_FUNC_DECL tmat4x2<T, P>& operator*= (U s);
00137 template <typename U>
00138 GLM_FUNC_DECL tmat4x2<T, P>& operator/= (U s);
00139
00141
00142
00143 GLM_FUNC_DECL tmat4x2<T, P> & operator++ ();
00144 GLM_FUNC_DECL tmat4x2<T, P> & operator-- ();
00145 GLM_FUNC_DECL tmat4x2<T, P> operator++(int);
00146 GLM_FUNC_DECL tmat4x2<T, P> operator--(int);
00147 };
00148
00149
00150 template <typename T, precision P>
00151 GLM_FUNC_DECL tmat4x2<T, P> operator+ (
00152 tmat4x2<T, P> const & m,
00153 T const & s);
00154
00155 template <typename T, precision P>
00156 GLM_FUNC_DECL tmat4x2<T, P> operator+ (
00157 tmat4x2<T, P> const & m1,
00158 tmat4x2<T, P> const & m2);
00159
00160 template <typename T, precision P>
00161 GLM_FUNC_DECL tmat4x2<T, P> operator- (
00162 tmat4x2<T, P> const & m,
00163 T const & s);
00164
00165 template <typename T, precision P>
00166 GLM_FUNC_DECL tmat4x2<T, P> operator- (
00167 tmat4x2<T, P> const & m1,
00168 tmat4x2<T, P> const & m2);
00169
00170 template <typename T, precision P>
00171 GLM_FUNC_DECL tmat4x2<T, P> operator* (
00172 tmat4x2<T, P> const & m,
00173 T const & s);
00174
00175 template <typename T, precision P>
00176 GLM_FUNC_DECL tmat4x2<T, P> operator* (
00177 T const & s,
00178 tmat4x2<T, P> const & m);
00179
00180 template <typename T, precision P>
00181 GLM_FUNC_DECL typename tmat4x2<T, P>::col_type operator* (
00182 tmat4x2<T, P> const & m,
00183 typename tmat4x2<T, P>::row_type const & v);
00184
00185 template <typename T, precision P>
00186 GLM_FUNC_DECL typename tmat4x2<T, P>::row_type operator* (
00187 typename tmat4x2<T, P>::col_type const & v,
00188 tmat4x2<T, P> const & m);
00189
00190 template <typename T, precision P>
00191 GLM_FUNC_DECL tmat3x2<T, P> operator* (
00192 tmat4x2<T, P> const & m1,
00193 tmat3x4<T, P> const & m2);
00194
00195 template <typename T, precision P>
00196 GLM_FUNC_DECL tmat4x2<T, P> operator* (
00197 tmat4x2<T, P> const & m1,
00198 tmat4x4<T, P> const & m2);
00199
00200 template <typename T, precision P>
00201 GLM_FUNC_DECL tmat2x3<T, P> operator* (
00202 tmat4x3<T, P> const & m1,
00203 tmat2x4<T, P> const & m2);
00204
00205 template <typename T, precision P>
00206 GLM_FUNC_DECL tmat4x2<T, P> operator/ (
00207 tmat4x2<T, P> const & m,
00208 T const & s);
00209
00210 template <typename T, precision P>
00211 GLM_FUNC_DECL tmat4x2<T, P> operator/ (
00212 T const & s,
00213 tmat4x2<T, P> const & m);
00214
00215
00216 template <typename T, precision P>
00217 GLM_FUNC_DECL tmat4x2<T, P> const operator-(
00218 tmat4x2<T, P> const & m);
00219
00220 }
00221 }
00222
00223 #ifndef GLM_EXTERNAL_TEMPLATE
00224 #include "type_mat4x2.inl"
00225 #endif