2 * Mesa 3-D graphics library
5 * Copyright (C) 2006 Brian Paul All Rights Reserved.
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 // Constructors and operators introduced in GLSL 1.20 - mostly on new
27 // (non-square) types of matrices.
29 // One important change in the language is that when a matrix is used
30 // as an argument to a matrix constructor, it must be the only argument
31 // for the constructor. The compiler takes care of it by itself and
32 // here we only care to re-introduce constructors for old (square)
37 // From Shader Spec, ver. 1.20, rev. 6
40 //// mat2x3: 2 columns of vec3
42 mat2x3 __constructor(const float f00, const float f10, const float f20,
43 const float f01, const float f11, const float f21)
53 mat2x3 __constructor(const float f)
55 __retVal = mat2x3( f, 0.0, 0.0,
59 mat2x3 __constructor(const int i)
61 const float f = float(i);
65 mat2x3 __constructor(const bool b)
67 const float f = float(b);
71 mat2x3 __constructor(const vec3 c0, const vec3 c1)
79 //// mat2x4: 2 columns of vec4
81 mat2x4 __constructor(const float f00, const float f10, const float f20, const float f30,
82 const float f01, const float f11, const float f21, const float f31)
94 mat2x4 __constructor(const float f)
96 __retVal = mat2x4( f, 0.0, 0.0, 0.0,
100 mat2x4 __constructor(const int i)
102 const float f = float(i);
103 __retVal = mat2x4(f);
106 mat2x4 __constructor(const bool b)
108 const float f = float(b);
109 __retVal = mat2x4(f);
112 mat2x4 __constructor(const vec4 c0, const vec4 c1)
120 //// mat3x2: 3 columns of vec2
122 mat3x2 __constructor(const float f00, const float f10,
123 const float f01, const float f11,
124 const float f02, const float f12)
134 mat3x2 __constructor(const float f)
136 __retVal = mat3x2( f, 0.0,
141 mat3x2 __constructor(const int i)
143 const float f = float(i);
144 __retVal = mat3x2(f);
147 mat3x2 __constructor(const bool b)
149 const float f = float(b);
150 __retVal = mat3x2(f);
153 mat3x2 __constructor(const vec2 c0, const vec2 c1, const vec2 c2)
162 //// mat3x4: 3 columns of vec4
164 mat3x4 __constructor(const float f00, const float f10, const float f20, const float f30,
165 const float f01, const float f11, const float f21, const float f31,
166 const float f02, const float f12, const float f22, const float f32)
182 mat3x4 __constructor(const float f)
184 __retVal = mat3x4( f, 0.0, 0.0, 0.0,
189 mat3x4 __constructor(const int i)
191 const float f = float(i);
192 __retVal = mat3x4(f);
195 mat3x4 __constructor(const bool b)
197 const float f = float(b);
198 __retVal = mat3x4(f);
201 mat3x4 __constructor(const vec4 c0, const vec4 c1, const vec4 c2)
210 //// mat4x2: 4 columns of vec2
212 mat4x2 __constructor(const float f00, const float f10,
213 const float f01, const float f11,
214 const float f02, const float f12,
215 const float f03, const float f13)
227 mat4x2 __constructor(const float f)
229 __retVal = mat4x2( f, 0.0,
235 mat4x2 __constructor(const int i)
237 const float f = float(i);
238 __retVal = mat4x2(f);
241 mat4x2 __constructor(const bool b)
243 const float f = float(b);
244 __retVal = mat4x2(f);
247 mat4x2 __constructor(const vec2 c0, const vec2 c1, const vec2 c2, const vec2 c3)
257 //// mat4x3: 4 columns of vec3
259 mat4x3 __constructor(const float f00, const float f10, const float f20,
260 const float f01, const float f11, const float f21,
261 const float f02, const float f12, const float f22,
262 const float f03, const float f13, const float f23)
278 mat4x3 __constructor(const float f)
280 __retVal = mat4x3( f, 0.0, 0.0,
286 mat4x3 __constructor(const int i)
288 const float f = float(i);
289 __retVal = mat4x3(f);
292 mat4x3 __constructor(const bool b)
294 const float f = float(b);
295 __retVal = mat4x3(f);
298 mat4x3 __constructor(const vec3 c0, const vec3 c1, const vec3 c2, const vec3 c3)
308 //// misc assorted matrix constructors
310 mat2 __constructor(const mat2 m)
315 mat2 __constructor(const mat3x2 m)
317 __retVal = mat2(m[0], m[1]);
320 mat2 __constructor(const mat4x2 m)
322 __retVal = mat2(m[0], m[1]);
325 mat2 __constructor(const mat2x3 m)
327 __retVal = mat2(m[0].xy, m[1].xy);
330 mat2 __constructor(const mat2x4 m)
332 __retVal = mat2(m[0].xy, m[1].xy);
335 mat2 __constructor(const mat3 m)
337 __retVal = mat2(m[0].xy, m[1].xy);
340 mat2 __constructor(const mat3x4 m)
342 __retVal = mat2(m[0].xy, m[1].xy);
345 mat2 __constructor(const mat4x3 m)
347 __retVal = mat2(m[0].xy, m[1].xy);
350 mat2 __constructor(const mat4 m)
352 __retVal = mat2(m[0].xy, m[1].xy);
357 mat2x3 __constructor(const mat2x3 m)
362 mat2x3 __constructor(const mat3 m)
364 __retVal = mat2x3(m[0], m[1]);
367 mat2x3 __constructor(const mat4x3 m)
369 __retVal = mat2x3(m[0], m[1]);
372 mat2x3 __constructor(const mat2x4 m)
374 __retVal = mat2x3(m[0].xyz, m[1].xyz);
377 mat2x3 __constructor(const mat3x4 m)
379 __retVal = mat2x3(m[0].xyz, m[1].xyz);
382 mat2x3 __constructor(const mat4 m)
384 __retVal = mat2x3(m[0].xyz, m[1].xyz);
387 mat2x3 __constructor(const mat2 m)
389 __retVal = mat2x3(m[0].x, m[0].y, 0.0,
390 m[1].x, m[1].y, 0.0);
393 mat2x3 __constructor(const mat3x2 m)
395 __retVal = mat2x3(m[0].x, m[0].y, 0.0,
396 m[1].x, m[1].y, 0.0);
399 mat2x3 __constructor(const mat4x2 m)
401 __retVal = mat2x3(m[0].x, m[0].y, 0.0,
402 m[1].x, m[1].y, 0.0);
407 mat2x4 __constructor(const mat2x4 m)
412 mat2x4 __constructor(const mat3x4 m)
414 __retVal = mat2x4(m[0], m[1]);
417 mat2x4 __constructor(const mat4 m)
419 __retVal = mat2x4(m[0], m[1]);
422 mat2x4 __constructor(const mat2x3 m)
424 __retVal = mat2x4(m[0].x, m[0].y, m[0].z, 0.0,
425 m[1].x, m[1].y, m[1].z, 0.0);
428 mat2x4 __constructor(const mat3 m)
430 __retVal = mat2x4(m[0].x, m[0].y, m[0].z, 0.0,
431 m[1].x, m[1].y, m[1].z, 0.0);
434 mat2x4 __constructor(const mat4x3 m)
436 __retVal = mat2x4(m[0].x, m[0].y, m[0].z, 0.0,
437 m[1].x, m[1].y, m[1].z, 0.0);
440 mat2x4 __constructor(const mat2 m)
442 __retVal = mat2x4(m[0].x, m[1].y, 0.0, 0.0,
443 m[1].x, m[1].y, 0.0, 0.0);
446 mat2x4 __constructor(const mat3x2 m)
448 __retVal = mat2x4(m[0].x, m[0].y, 0.0, 0.0,
449 m[1].x, m[1].y, 0.0, 0.0);
452 mat2x4 __constructor(const mat4x2 m)
454 __retVal = mat2x4(m[0].x, m[0].y, 0.0, 0.0,
455 m[1].x, m[1].y, 0.0, 0.0);
460 mat3x2 __constructor(const mat3x2 m)
465 mat3x2 __constructor(const mat4x2 m)
467 __retVal = mat3x2(m[0], m[1], m[2]);
470 mat3x2 __constructor(const mat3 m)
472 __retVal = mat3x2(m[0], m[1], m[2]);
475 mat3x2 __constructor(const mat3x4 m)
477 __retVal = mat3x2(m[0].x, m[0].y,
482 mat3x2 __constructor(const mat4x3 m)
484 __retVal = mat3x2(m[0].x, m[0].y,
489 mat3x2 __constructor(const mat4 m)
491 __retVal = mat3x2(m[0].x, m[0].y,
496 mat3x2 __constructor(const mat2 m)
498 __retVal = mat3x2(m[0], m[1], vec2(0.0));
501 mat3x2 __constructor(const mat2x3 m)
503 __retVal = mat3x2(m[0].x, m[0].y,
508 mat3x2 __constructor(const mat2x4 m)
510 __retVal = mat3x2(m[0].x, m[0].y,
518 mat3 __constructor(const mat3 m)
523 mat3 __constructor(const mat4x3 m)
532 mat3 __constructor(const mat3x4 m)
541 mat3 __constructor(const mat4 m)
550 mat3 __constructor(const mat2x3 m)
559 mat3 __constructor(const mat2x4 m)
568 mat3 __constructor(const mat3x2 m)
577 mat3 __constructor(const mat4x2 m)
586 mat3 __constructor(const mat2 m)
596 mat3x4 __constructor(const mat3x4 m)
601 mat3x4 __constructor(const mat4 m)
610 mat3x4 __constructor(const mat3 m)
619 mat3x4 __constructor(const mat4x3 m)
628 mat3x4 __constructor(const mat2x4 m)
637 mat3x4 __constructor(const mat2x3 m)
646 mat3x4 __constructor(const mat3x2 m)
655 mat3x4 __constructor(const mat4x2 m)
664 mat3x4 __constructor(const mat2 m)
674 mat4x2 __constructor(const mat4x2 m)
679 mat4x2 __constructor(const mat4x3 m)
689 mat4x2 __constructor(const mat4 m)
699 mat4x2 __constructor(const mat3x2 m)
708 mat4x2 __constructor(const mat3 m)
718 mat4x2 __constructor(const mat3x4 m)
728 mat4x2 __constructor(const mat2 m)
738 mat4x2 __constructor(const mat2x3 m)
748 mat4x2 __constructor(const mat2x4 m)
759 mat4x3 __constructor(const mat4x3 m)
764 mat4x3 __constructor(const mat4 m)
774 mat4x3 __constructor(const mat3 m)
784 mat4x3 __constructor(const mat3x4 m)
794 mat4x3 __constructor(const mat4x2 m)
804 mat4x3 __constructor(const mat2x3 m)
814 mat4x3 __constructor(const mat3x2 m)
824 mat4x3 __constructor(const mat2x4 m)
834 mat4x3 __constructor(const mat2 m)
845 mat4 __constructor(const mat4 m)
850 mat4 __constructor(const mat3x4 m)
860 mat4 __constructor(const mat4x3 m)
870 mat4 __constructor(const mat2x4 m)
880 mat4 __constructor(const mat4x2 m)
890 mat4 __constructor(const mat3 m)
900 mat4 __constructor(const mat2x3 m)
910 mat4 __constructor(const mat3x2 m)
920 mat4 __constructor(const mat2 m)
931 void __operator += (inout mat2x3 m, const mat2x3 n) {
936 void __operator += (inout mat2x4 m, const mat2x4 n) {
941 void __operator += (inout mat3x2 m, const mat3x2 n) {
947 void __operator += (inout mat3x4 m, const mat3x4 n) {
953 void __operator += (inout mat4x2 m, const mat4x2 n) {
960 void __operator += (inout mat4x3 m, const mat4x3 n) {
968 void __operator -= (inout mat2x3 m, const mat2x3 n) {
973 void __operator -= (inout mat2x4 m, const mat2x4 n) {
978 void __operator -= (inout mat3x2 m, const mat3x2 n) {
984 void __operator -= (inout mat3x4 m, const mat3x4 n) {
990 void __operator -= (inout mat4x2 m, const mat4x2 n) {
997 void __operator -= (inout mat4x3 m, const mat4x3 n) {
1005 void __operator /= (inout mat2x3 m, const mat2x3 n) {
1010 void __operator /= (inout mat2x4 m, const mat2x4 n) {
1015 void __operator /= (inout mat3x2 m, const mat3x2 n) {
1021 void __operator /= (inout mat3x4 m, const mat3x4 n) {
1027 void __operator /= (inout mat4x2 m, const mat4x2 n) {
1034 void __operator /= (inout mat4x3 m, const mat4x3 n) {
1042 vec3 __operator * (const mat2x3 m, const vec2 v)
1044 __retVal.x = v.x * m[0].x + v.y * m[1].x;
1045 __retVal.y = v.x * m[0].y + v.y * m[1].y;
1046 __retVal.z = v.x * m[0].z + v.y * m[1].z;
1049 vec4 __operator * (const mat2x4 m, const vec2 v)
1051 __retVal.x = v.x * m[0].x + v.y * m[1].x;
1052 __retVal.y = v.x * m[0].y + v.y * m[1].y;
1053 __retVal.z = v.x * m[0].z + v.y * m[1].z;
1054 __retVal.w = v.x * m[0].w + v.y * m[1].w;
1057 vec2 __operator * (const mat3x2 m, const vec3 v)
1059 __retVal.x = v.x * m[0].x + v.y * m[1].x + v.z * m[2].x;
1060 __retVal.y = v.x * m[0].y + v.y * m[1].y + v.z * m[2].y;
1063 vec4 __operator * (const mat3x4 m, const vec3 v)
1065 __retVal.x = v.x * m[0].x + v.y * m[1].x + v.z * m[2].x;
1066 __retVal.y = v.x * m[0].y + v.y * m[1].y + v.z * m[2].y;
1067 __retVal.z = v.x * m[0].z + v.y * m[1].z + v.z * m[2].z;
1068 __retVal.w = v.x * m[0].w + v.y * m[1].w + v.z * m[2].w;
1071 vec2 __operator * (const mat4x2 m, const vec4 v)
1073 __retVal.x = v.x * m[0].x + v.y * m[1].x + v.z * m[2].x + v.w * m[3].x;
1074 __retVal.y = v.x * m[0].y + v.y * m[1].y + v.z * m[2].y + v.w * m[3].y;
1077 vec3 __operator * (const mat4x3 m, const vec4 v)
1079 __retVal.x = v.x * m[0].x + v.y * m[1].x + v.z * m[2].x + v.w * m[3].x;
1080 __retVal.y = v.x * m[0].y + v.y * m[1].y + v.z * m[2].y + v.w * m[3].y;
1081 __retVal.z = v.x * m[0].z + v.y * m[1].z + v.z * m[2].z + v.w * m[3].z;
1085 mat3x2 __operator * (const mat2 m, const mat3x2 n)
1087 //return mat3x2 (m * n[0], m * n[1], m * n[2]);
1088 __retVal[0] = m * n[0];
1089 __retVal[1] = m * n[1];
1090 __retVal[2] = m * n[2];
1093 mat4x2 __operator * (const mat2 m, const mat4x2 n)
1095 //return mat4x2 (m * n[0], m * n[1], m * n[2], m * n[3]);
1096 __retVal[0] = m * n[0];
1097 __retVal[1] = m * n[1];
1098 __retVal[2] = m * n[2];
1099 __retVal[3] = m * n[3];
1103 mat2x3 __operator * (const mat2x3 m, const mat2 n)
1105 //return mat2x3 (m * n[0], m * n[1]);
1106 __retVal[0] = m * n[0];
1107 __retVal[1] = m * n[1];
1110 mat3 __operator * (const mat2x3 m, const mat3x2 n)
1112 //return mat3 (m * n[0], m * n[1], m * n[2]);
1113 __retVal[0] = m * n[0];
1114 __retVal[1] = m * n[1];
1115 __retVal[2] = m * n[2];
1118 mat4x3 __operator * (const mat2x3 m, const mat4x2 n)
1120 //return mat4x3 (m * n[0], m * n[1], m * n[2], m * n[3]);
1121 __retVal[0] = m * n[0];
1122 __retVal[1] = m * n[1];
1123 __retVal[2] = m * n[2];
1124 __retVal[3] = m * n[3];
1128 mat2x4 __operator * (const mat2x4 m, const mat2 n)
1130 //return mat2x4 (m * n[0], m * n[1]);
1131 __retVal[0] = m * n[0];
1132 __retVal[1] = m * n[1];
1135 mat3x4 __operator * (const mat2x4 m, const mat3x2 n)
1137 //return mat3x4 (m * n[0], m * n[1], m * n[2]);
1138 __retVal[0] = m * n[0];
1139 __retVal[1] = m * n[1];
1140 __retVal[2] = m * n[2];
1143 mat4 __operator * (const mat2x4 m, const mat4x2 n)
1145 //return mat4 (m * n[0], m * n[1], m * n[2], m * n[3]);
1146 __retVal[0] = m * n[0];
1147 __retVal[1] = m * n[1];
1148 __retVal[2] = m * n[2];
1149 __retVal[3] = m * n[3];
1153 mat2 __operator * (const mat3x2 m, const mat2x3 n)
1155 //return mat2 (m * n[0], m * n[1]);
1156 __retVal[0] = m * n[0];
1157 __retVal[1] = m * n[1];
1160 mat3x2 __operator * (const mat3x2 m, const mat3 n)
1162 //return mat3x2 (m * n[0], m * n[1], m * n[2]);
1163 __retVal[0] = m * n[0];
1164 __retVal[1] = m * n[1];
1165 __retVal[2] = m * n[2];
1168 mat4x2 __operator * (const mat3x2 m, const mat4x3 n)
1170 //return mat4x2 (m * n[0], m * n[1], m * n[2], m * n[3]);
1171 __retVal[0] = m * n[0];
1172 __retVal[1] = m * n[1];
1173 __retVal[2] = m * n[2];
1174 __retVal[3] = m * n[3];
1178 mat2x3 __operator * (const mat3 m, const mat2x3 n)
1180 //return mat2x3 (m * n[0], m * n[1]);
1181 __retVal[0] = m * n[0];
1182 __retVal[1] = m * n[1];
1185 mat4x3 __operator * (const mat3 m, const mat4x3 n)
1187 //return mat4x3 (m * n[0], m * n[1], m * n[2], m * n[3]);
1188 __retVal[0] = m * n[0];
1189 __retVal[1] = m * n[1];
1190 __retVal[2] = m * n[2];
1191 __retVal[3] = m * n[3];
1195 mat2x4 __operator * (const mat3x4 m, const mat2x3 n)
1197 //return mat2x4 (m * n[0], m * n[1]);
1198 __retVal[0] = m * n[0];
1199 __retVal[1] = m * n[1];
1202 mat3x4 __operator * (const mat3x4 m, const mat3 n)
1204 //return mat3x4 (m * n[0], m * n[1], m * n[2]);
1205 __retVal[0] = m * n[0];
1206 __retVal[1] = m * n[1];
1207 __retVal[2] = m * n[2];
1210 mat4 __operator * (const mat3x4 m, const mat4x3 n)
1212 //return mat4 (m * n[0], m * n[1], m * n[2], m * n[3]);
1213 __retVal[0] = m * n[0];
1214 __retVal[1] = m * n[1];
1215 __retVal[2] = m * n[2];
1216 __retVal[3] = m * n[3];
1220 mat2 __operator * (const mat4x2 m, const mat2x4 n)
1222 //return = mat2 (m * n[0], m * n[1]);
1223 __retVal[0] = m * n[0];
1224 __retVal[1] = m * n[1];
1227 mat3x2 __operator * (const mat4x2 m, const mat3x4 n)
1229 //return mat3x2 (m * n[0], m * n[1], m * n[2]);
1230 __retVal[0] = m * n[0];
1231 __retVal[1] = m * n[1];
1232 __retVal[2] = m * n[2];
1235 mat4x2 __operator * (const mat4x2 m, const mat4 n)
1237 //return mat4x2 (m * n[0], m * n[1], m * n[2], m * n[3]);
1238 __retVal[0] = m * n[0];
1239 __retVal[1] = m * n[1];
1240 __retVal[2] = m * n[2];
1241 __retVal[3] = m * n[3];
1245 mat2x3 __operator * (const mat4x3 m, const mat2x4 n)
1247 //return mat2x3 (m * n[0], m * n[1]);
1248 __retVal[0] = m * n[0];
1249 __retVal[1] = m * n[1];
1252 mat3 __operator * (const mat4x3 m, const mat3x4 n)
1254 //return mat3 (m * n[0], m * n[1], m * n[2]);
1255 __retVal[0] = m * n[0];
1256 __retVal[1] = m * n[1];
1257 __retVal[2] = m * n[2];
1260 mat4x3 __operator * (const mat4x3 m, const mat4 n)
1262 //return mat4x3 (m * n[0], m * n[1], m * n[2], m * n[3]);
1263 __retVal[0] = m * n[0];
1264 __retVal[1] = m * n[1];
1265 __retVal[2] = m * n[2];
1266 __retVal[3] = m * n[3];
1270 mat2x4 __operator * (const mat4 m, const mat2x4 n)
1272 //return mat2x4 (m * n[0], m * n[1]);
1273 __retVal[0] = m * n[0];
1274 __retVal[1] = m * n[1];
1277 mat3x4 __operator * (const mat4 m, const mat3x4 n)
1279 //return mat3x4 (m * n[0], m * n[1], m * n[2]);
1280 __retVal[0] = m * n[0];
1281 __retVal[1] = m * n[1];
1282 __retVal[2] = m * n[2];
1286 void __operator *= (inout mat2x3 m, const mat2 n) {
1290 void __operator *= (inout mat2x4 m, const mat2 n) {
1294 void __operator *= (inout mat3x2 m, const mat3 n) {
1298 void __operator *= (inout mat3x4 m, const mat3 n) {
1302 void __operator *= (inout mat4x2 m, const mat4 n) {
1306 void __operator *= (inout mat4x3 m, const mat4 n) {
1311 vec3 __operator * (const vec2 v, const mat3x2 m)
1313 __retVal.x = dot(v, m[0]);
1314 __retVal.y = dot(v, m[1]);
1315 __retVal.z = dot(v, m[2]);
1318 vec4 __operator * (const vec2 v, const mat4x2 m)
1320 __retVal.x = dot(v, m[0]);
1321 __retVal.y = dot(v, m[1]);
1322 __retVal.z = dot(v, m[2]);
1323 __retVal.w = dot(v, m[3]);
1326 vec2 __operator * (const vec3 v, const mat2x3 m)
1328 __retVal.x = dot(v, m[0]);
1329 __retVal.y = dot(v, m[1]);
1332 vec4 __operator * (const vec3 v, const mat4x3 m)
1334 __retVal.x = dot(v, m[0]);
1335 __retVal.y = dot(v, m[1]);
1336 __retVal.z = dot(v, m[2]);
1337 __retVal.w = dot(v, m[3]);
1340 vec2 __operator * (const vec4 v, const mat2x4 m)
1342 __retVal.x = dot(v, m[0]);
1343 __retVal.y = dot(v, m[1]);
1346 vec3 __operator * (const vec4 v, const mat3x4 m)
1348 __retVal.x = dot(v, m[0]);
1349 __retVal.y = dot(v, m[1]);
1350 __retVal.z = dot(v, m[2]);
1354 void __operator += (inout mat2x3 m, const float a) {
1359 void __operator += (inout mat2x4 m, const float a) {
1364 void __operator += (inout mat3x2 m, const float a) {
1370 void __operator += (inout mat3x4 m, const float a) {
1376 void __operator += (inout mat4x2 m, const float a) {
1383 void __operator += (inout mat4x3 m, const float a) {
1391 void __operator -= (inout mat2x3 m, const float a) {
1396 void __operator -= (inout mat2x4 m, const float a) {
1401 void __operator -= (inout mat3x2 m, const float a) {
1407 void __operator -= (inout mat3x4 m, const float a) {
1413 void __operator -= (inout mat4x2 m, const float a) {
1420 void __operator -= (inout mat4x3 m, const float a) {
1428 void __operator *= (inout mat2x3 m, const float a) {
1433 void __operator *= (inout mat2x4 m, const float a) {
1438 void __operator *= (inout mat3x2 m, const float a) {
1444 void __operator *= (inout mat3x4 m, const float a) {
1450 void __operator *= (inout mat4x2 m, const float a) {
1457 void __operator *= (inout mat4x3 m, const float a) {
1465 void __operator /= (inout mat2x3 m, const float a) {
1470 void __operator /= (inout mat2x4 m, const float a) {
1475 void __operator /= (inout mat3x2 m, const float a) {
1481 void __operator /= (inout mat3x4 m, const float a) {
1487 void __operator /= (inout mat4x2 m, const float a) {
1494 void __operator /= (inout mat4x3 m, const float a) {
1502 mat2x3 __operator + (const mat2x3 m, const mat2x3 n) {
1503 return mat2x3 (m[0] + n[0], m[1] + n[1]);
1506 mat2x4 __operator + (const mat2x4 m, const mat2x4 n) {
1507 return mat2x4 (m[0] + n[0], m[1] + n[1]);
1510 mat3x2 __operator + (const mat3x2 m, const mat3x2 n) {
1511 return mat3x2 (m[0] + n[0], m[1] + n[1], m[2] + n[2]);
1514 mat3x4 __operator + (const mat3x4 m, const mat3x4 n) {
1515 return mat3x4 (m[0] + n[0], m[1] + n[1], m[2] + n[2]);
1518 mat4x2 __operator + (const mat4x2 m, const mat4x2 n) {
1519 return mat4x2 (m[0] + n[0], m[1] + n[1], m[2] + n[2], m[3] + n[3]);
1522 mat4x3 __operator + (const mat4x3 m, const mat4x3 n) {
1523 return mat4x3 (m[0] + n[0], m[1] + n[1], m[2] + n[2], m[3] + n[3]);
1527 mat2x3 __operator - (const mat2x3 m, const mat2x3 n) {
1528 return mat2x3 (m[0] - n[0], m[1] - n[1]);
1531 mat2x4 __operator - (const mat2x4 m, const mat2x4 n) {
1532 return mat2x4 (m[0] - n[0], m[1] - n[1]);
1535 mat3x2 __operator - (const mat3x2 m, const mat3x2 n) {
1536 return mat3x2 (m[0] - n[0], m[1] - n[1], m[2] - n[2]);
1539 mat3x4 __operator - (const mat3x4 m, const mat3x4 n) {
1540 return mat3x4 (m[0] - n[0], m[1] - n[1], m[2] - n[2]);
1543 mat4x2 __operator - (const mat4x2 m, const mat4x2 n) {
1544 return mat4x2 (m[0] - n[0], m[1] - n[1], m[2] - n[2], m[3] - n[3]);
1547 mat4x3 __operator - (const mat4x3 m, const mat4x3 n) {
1548 return mat4x3 (m[0] - n[0], m[1] - n[1], m[2] - n[2], m[3] - n[3]);
1552 mat2x3 __operator / (const mat2x3 m, const mat2x3 n) {
1553 return mat2x3 (m[0] / n[0], m[1] / n[1]);
1556 mat2x4 __operator / (const mat2x4 m, const mat2x4 n) {
1557 return mat2x4 (m[0] / n[0], m[1] / n[1]);
1560 mat3x2 __operator / (const mat3x2 m, const mat3x2 n) {
1561 return mat3x2 (m[0] / n[0], m[1] / n[1], m[2] / n[2]);
1564 mat3x4 __operator / (const mat3x4 m, const mat3x4 n) {
1565 return mat3x4 (m[0] / n[0], m[1] / n[1], m[2] / n[2]);
1568 mat4x2 __operator / (const mat4x2 m, const mat4x2 n) {
1569 return mat4x2 (m[0] / n[0], m[1] / n[1], m[2] / n[2], m[3] / n[3]);
1572 mat4x3 __operator / (const mat4x3 m, const mat4x3 n) {
1573 return mat4x3 (m[0] / n[0], m[1] / n[1], m[2] / n[2], m[3] / n[3]);
1577 mat2x3 __operator + (const float a, const mat2x3 n) {
1578 return mat2x3 (a + n[0], a + n[1]);
1581 mat2x3 __operator + (const mat2x3 m, const float b) {
1582 return mat2x3 (m[0] + b, m[1] + b);
1585 mat2x4 __operator + (const float a, const mat2x4 n) {
1586 return mat2x4 (a + n[0], a + n[1]);
1589 mat2x4 __operator + (const mat2x4 m, const float b) {
1590 return mat2x4 (m[0] + b, m[1] + b);
1593 mat3x2 __operator + (const float a, const mat3x2 n) {
1594 return mat3x2 (a + n[0], a + n[1], a + n[2]);
1597 mat3x2 __operator + (const mat3x2 m, const float b) {
1598 return mat3x2 (m[0] + b, m[1] + b, m[2] + b);
1601 mat3x4 __operator + (const float a, const mat3x4 n) {
1602 return mat3x4 (a + n[0], a + n[1], a + n[2]);
1605 mat3x4 __operator + (const mat3x4 m, const float b) {
1606 return mat3x4 (m[0] + b, m[1] + b, m[2] + b);
1609 mat4x2 __operator + (const mat4x2 m, const float b) {
1610 return mat4x2 (m[0] + b, m[1] + b, m[2] + b, m[3] + b);
1613 mat4x2 __operator + (const float a, const mat4x2 n) {
1614 return mat4x2 (a + n[0], a + n[1], a + n[2], a + n[3]);
1617 mat4x3 __operator + (const mat4x3 m, const float b) {
1618 return mat4x3 (m[0] + b, m[1] + b, m[2] + b, m[3] + b);
1621 mat4x3 __operator + (const float a, const mat4x3 n) {
1622 return mat4x3 (a + n[0], a + n[1], a + n[2], a + n[3]);
1626 mat2x3 __operator - (const float a, const mat2x3 n) {
1627 return mat2x3 (a - n[0], a - n[1]);
1630 mat2x3 __operator - (const mat2x3 m, const float b) {
1631 return mat2x3 (m[0] - b, m[1] - b);
1634 mat2x4 __operator - (const float a, const mat2x4 n) {
1635 return mat2x4 (a - n[0], a - n[1]);
1638 mat2x4 __operator - (const mat2x4 m, const float b) {
1639 return mat2x4 (m[0] - b, m[1] - b);
1642 mat3x2 __operator - (const float a, const mat3x2 n) {
1643 return mat3x2 (a - n[0], a - n[1], a - n[2]);
1646 mat3x2 __operator - (const mat3x2 m, const float b) {
1647 return mat3x2 (m[0] - b, m[1] - b, m[2] - b);
1650 mat3x4 __operator - (const float a, const mat3x4 n) {
1651 return mat3x4 (a - n[0], a - n[1], a - n[2]);
1654 mat3x4 __operator - (const mat3x4 m, const float b) {
1655 return mat3x4 (m[0] - b, m[1] - b, m[2] - b);
1658 mat4x2 __operator - (const mat4x2 m, const float b) {
1659 return mat4x2 (m[0] - b, m[1] - b, m[2] - b, m[3] - b);
1662 mat4x2 __operator - (const float a, const mat4x2 n) {
1663 return mat4x2 (a - n[0], a - n[1], a - n[2], a - n[3]);
1666 mat4x3 __operator - (const mat4x3 m, const float b) {
1667 return mat4x3 (m[0] - b, m[1] - b, m[2] - b, m[3] - b);
1670 mat4x3 __operator - (const float a, const mat4x3 n) {
1671 return mat4x3 (a - n[0], a - n[1], a - n[2], a - n[3]);
1675 mat2x3 __operator * (const float a, const mat2x3 n)
1677 //return mat2x3 (a * n[0], a * n[1]);
1678 __retVal[0] = a * n[0];
1679 __retVal[1] = a * n[1];
1682 mat2x3 __operator * (const mat2x3 m, const float b)
1684 //return mat2x3 (m[0] * b, m[1] * b);
1685 __retVal[0] = m[0] * b;
1686 __retVal[1] = m[1] * b;
1689 mat2x4 __operator * (const float a, const mat2x4 n)
1691 //return mat2x4 (a * n[0], a * n[1]);
1692 __retVal[0] = a * n[0];
1693 __retVal[1] = a * n[1];
1696 mat2x4 __operator * (const mat2x4 m, const float b)
1698 //return mat2x4 (m[0] * b, m[1] * b);
1699 __retVal[0] = m[0] * b;
1700 __retVal[1] = m[1] * b;
1703 mat3x2 __operator * (const float a, const mat3x2 n)
1705 //return mat3x2 (a * n[0], a * n[1], a * n[2]);
1706 __retVal[0] = a * n[0];
1707 __retVal[1] = a * n[1];
1708 __retVal[2] = a * n[2];
1711 mat3x2 __operator * (const mat3x2 m, const float b)
1713 //return mat3x2 (m[0] * b, m[1] * b, m[2] * b);
1714 __retVal[0] = m[0] * b;
1715 __retVal[1] = m[1] * b;
1716 __retVal[2] = m[2] * b;
1719 mat3x4 __operator * (const float a, const mat3x4 n)
1721 //return mat3x4 (a * n[0], a * n[1], a * n[2]);
1722 __retVal[0] = a * n[0];
1723 __retVal[1] = a * n[1];
1724 __retVal[2] = a * n[2];
1727 mat3x4 __operator * (const mat3x4 m, const float b)
1729 //return mat3x4 (m[0] * b, m[1] * b, m[2] * b);
1730 __retVal[0] = m[0] * b;
1731 __retVal[1] = m[1] * b;
1732 __retVal[2] = m[2] * b;
1735 mat4x2 __operator * (const mat4x2 m, const float b)
1737 //return mat4x2 (m[0] * b, m[1] * b, m[2] * b, m[3] * b);
1738 __retVal[0] = m[0] * b;
1739 __retVal[1] = m[1] * b;
1740 __retVal[2] = m[2] * b;
1741 __retVal[3] = m[3] * b;
1744 mat4x2 __operator * (const float a, const mat4x2 n)
1746 //return mat4x2 (a * n[0], a * n[1], a * n[2], a * n[3]);
1747 __retVal[0] = a * n[0];
1748 __retVal[1] = a * n[1];
1749 __retVal[2] = a * n[2];
1750 __retVal[3] = a * n[3];
1753 mat4x3 __operator * (const mat4x3 m, const float b)
1755 //return mat4x3 (m[0] * b, m[1] * b, m[2] * b, m[3] * b);
1756 __retVal[0] = m[0] * b;
1757 __retVal[1] = m[1] * b;
1758 __retVal[2] = m[2] * b;
1759 __retVal[3] = m[3] * b;
1762 mat4x3 __operator * (const float a, const mat4x3 n)
1764 //return mat4x3 (a * n[0], a * n[1], a * n[2], a * n[3]);
1765 __retVal[0] = a * n[0];
1766 __retVal[1] = a * n[1];
1767 __retVal[2] = a * n[2];
1768 __retVal[3] = a * n[3];
1772 mat2x3 __operator / (const float a, const mat2x3 n)
1774 //return mat2x3 (a / n[0], a / n[1]);
1775 const float inv = 1.0 / a;
1776 __retVal[0] = inv * n[0];
1777 __retVal[1] = inv * n[1];
1780 mat2x3 __operator / (const mat2x3 m, const float b)
1782 //return mat2x3 (m[0] / b, m[1] / b);
1783 const float inv = 1.0 / b;
1784 __retVal[0] = m[0] * inv;
1785 __retVal[1] = m[1] * inv;
1788 mat2x4 __operator / (const float a, const mat2x4 n)
1790 //return mat2x4 (a / n[0], a / n[1]);
1791 const float inv = 1.0 / a;
1792 __retVal[0] = inv * n[0];
1793 __retVal[1] = inv * n[1];
1796 mat2x4 __operator / (const mat2x4 m, const float b)
1798 //return mat2x4 (m[0] / b, m[1] / b);
1799 const float inv = 1.0 / b;
1800 __retVal[0] = m[0] * inv;
1801 __retVal[1] = m[1] * inv;
1804 mat3x2 __operator / (const float a, const mat3x2 n)
1806 //return mat3x2 (a / n[0], a / n[1], a / n[2]);
1807 const float inv = 1.0 / a;
1808 __retVal[0] = inv * n[0];
1809 __retVal[1] = inv * n[1];
1810 __retVal[2] = inv * n[2];
1813 mat3x2 __operator / (const mat3x2 m, const float b)
1815 //return mat3x2 (m[0] / b, m[1] / b, m[2] / b);
1816 const float inv = 1.0 / b;
1817 __retVal[0] = m[0] * inv;
1818 __retVal[1] = m[1] * inv;
1819 __retVal[2] = m[2] * inv;
1822 mat3x4 __operator / (const float a, const mat3x4 n)
1824 //return mat3x4 (a / n[0], a / n[1], a / n[2]);
1825 const float inv = 1.0 / a;
1826 __retVal[0] = inv * n[0];
1827 __retVal[1] = inv * n[1];
1828 __retVal[2] = inv * n[2];
1831 mat3x4 __operator / (const mat3x4 m, const float b)
1833 //return mat3x4 (m[0] / b, m[1] / b, m[2] / b);
1834 const float inv = 1.0 / b;
1835 __retVal[0] = m[0] * inv;
1836 __retVal[1] = m[1] * inv;
1837 __retVal[2] = m[2] * inv;
1840 mat4x2 __operator / (const mat4x2 m, const float b)
1842 //return mat4x2 (m[0] / b, m[1] / b, m[2] / b, m[3] / b);
1843 const float inv = 1.0 / b;
1844 __retVal[0] = m[0] * inv;
1845 __retVal[1] = m[1] * inv;
1846 __retVal[2] = m[2] * inv;
1847 __retVal[3] = m[3] * inv;
1850 mat4x2 __operator / (const float a, const mat4x2 n)
1852 //return mat4x2 (a / n[0], a / n[1], a / n[2], a / n[3]);
1853 const float inv = 1.0 / a;
1854 __retVal[0] = inv * n[0];
1855 __retVal[1] = inv * n[1];
1856 __retVal[2] = inv * n[2];
1857 __retVal[3] = inv * n[3];
1860 mat4x3 __operator / (const mat4x3 m, const float b)
1862 //return mat4x3 (m[0] / b, m[1] / b, m[2] / b, m[3] / b);
1863 const float inv = 1.0 / b;
1864 __retVal[0] = m[0] * inv;
1865 __retVal[1] = m[1] * inv;
1866 __retVal[2] = m[2] * inv;
1867 __retVal[3] = m[3] * inv;
1870 mat4x3 __operator / (const float a, const mat4x3 n)
1872 //return mat4x3 (a / n[0], a / n[1], a / n[2], a / n[3]);
1873 const float inv = 1.0 / a;
1874 __retVal[0] = inv * n[0];
1875 __retVal[1] = inv * n[1];
1876 __retVal[2] = inv * n[2];
1877 __retVal[3] = inv * n[3];
1881 mat2x3 __operator - (const mat2x3 m) {
1882 return mat2x3 (-m[0], -m[1]);
1885 mat2x4 __operator - (const mat2x4 m) {
1886 return mat2x4 (-m[0], -m[1]);
1889 mat3x2 __operator - (const mat3x2 m) {
1890 return mat3x2 (-m[0], -m[1], -m[2]);
1893 mat3x4 __operator - (const mat3x4 m) {
1894 return mat3x4 (-m[0], -m[1], -m[2]);
1897 mat4x2 __operator - (const mat4x2 m) {
1898 return mat4x2 (-m[0], -m[1], -m[2], -m[3]);
1901 mat4x3 __operator - (const mat4x3 m) {
1902 return mat4x3 (-m[0], -m[1], -m[2], -m[3]);
1906 void __operator -- (inout mat2x3 m) {
1911 void __operator -- (inout mat2x4 m) {
1916 void __operator -- (inout mat3x2 m) {
1922 void __operator -- (inout mat3x4 m) {
1928 void __operator -- (inout mat4x2 m) {
1935 void __operator -- (inout mat4x3 m) {
1943 void __operator ++ (inout mat2x3 m) {
1948 void __operator ++ (inout mat2x4 m) {
1953 void __operator ++ (inout mat3x2 m) {
1959 void __operator ++ (inout mat3x4 m) {
1965 void __operator ++ (inout mat4x2 m) {
1972 void __operator ++ (inout mat4x3 m) {
1980 mat2x3 __operator -- (inout mat2x3 m, const int) {
1981 return mat2x3 (m[0]--, m[1]--);
1984 mat2x4 __operator -- (inout mat2x4 m, const int) {
1985 return mat2x4 (m[0]--, m[1]--);
1988 mat3x2 __operator -- (inout mat3x2 m, const int) {
1989 return mat3x2 (m[0]--, m[1]--, m[2]--);
1992 mat3x4 __operator -- (inout mat3x4 m, const int) {
1993 return mat3x4 (m[0]--, m[1]--, m[2]--);
1996 mat4x2 __operator -- (inout mat4x2 m, const int) {
1997 return mat4x2 (m[0]--, m[1]--, m[2]--, m[3]--);
2000 mat4x3 __operator -- (inout mat4x3 m, const int) {
2001 return mat4x3 (m[0]--, m[1]--, m[2]--, m[3]--);
2005 mat2x3 __operator ++ (inout mat2x3 m, const int) {
2006 return mat2x3 (m[0]++, m[1]++);
2009 mat2x4 __operator ++ (inout mat2x4 m, const int) {
2010 return mat2x4 (m[0]++, m[1]++);
2013 mat3x2 __operator ++ (inout mat3x2 m, const int) {
2014 return mat3x2 (m[0]++, m[1]++, m[2]++);
2017 mat3x4 __operator ++ (inout mat3x4 m, const int) {
2018 return mat3x4 (m[0]++, m[1]++, m[2]++);
2021 mat4x2 __operator ++ (inout mat4x2 m, const int) {
2022 return mat4x2 (m[0]++, m[1]++, m[2]++, m[3]++);
2025 mat4x3 __operator ++ (inout mat4x3 m, const int) {
2026 return mat4x3 (m[0]++, m[1]++, m[2]++, m[3]++);