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 __constructor (const float df) {
47 mat2x3 __constructor (const int di) {
49 __asm int_to_float df, di;
53 mat2x3 __constructor (const bool db) {
54 return mat2x3 (db ? 1. : 0.);
58 mat2x4 __constructor (const float df) {
65 mat2x4 __constructor (const int di) {
67 __asm int_to_float df, di;
71 mat2x4 __constructor (const bool db) {
72 return mat2x4 (db ? 1. : 0.);
76 mat3x2 __constructor (const float df) {
84 mat3x2 __constructor (const int di) {
86 __asm int_to_float df, di;
90 mat3x2 __constructor (const bool db) {
91 return mat3x2 (db ? 1. : 0.);
95 mat3x4 __constructor (const float df) {
103 mat3x4 __constructor (const int di) {
105 __asm int_to_float df, di;
109 mat3x4 __constructor (const bool db) {
110 return mat3x4 (db ? 1. : 0.);
114 mat4x2 __constructor (const float df) {
123 mat4x2 __constructor (const int di) {
125 __asm int_to_float df, di;
129 mat4x2 __constructor (const bool db) {
130 return mat4x2 (db ? 1. : 0.);
134 mat4x3 __constructor (const float df) {
143 mat4x3 __constructor (const int di) {
145 __asm int_to_float df, di;
149 mat4x3 __constructor (const bool db) {
150 return mat4x3 (db ? 1. : 0.);
154 mat2 __constructor (const mat2 m) {
158 mat2 __constructor (const mat3x2 m) {
165 mat2 __constructor (const mat4x2 m) {
172 mat2 __constructor (const mat2x3 m) {
179 mat2 __constructor (const mat2x4 m) {
186 mat2 __constructor (const mat3 m) {
193 mat2 __constructor (const mat3x4 m) {
200 mat2 __constructor (const mat4x3 m) {
207 mat2 __constructor (const mat4 m) {
215 mat2x3 __constructor (const mat2x3 m) {
219 mat2x3 __constructor (const mat3 m) {
226 mat2x3 __constructor (const mat4x3 m) {
233 mat2x3 __constructor (const mat2x4 m) {
240 mat2x3 __constructor (const mat3x4 m) {
247 mat2x3 __constructor (const mat4 m) {
254 mat2x3 __constructor (const mat2 m) {
261 mat2x3 __constructor (const mat3x2 m) {
268 mat2x3 __constructor (const mat4x2 m) {
276 mat2x4 __constructor (const mat2x4 m) {
280 mat2x4 __constructor (const mat3x4 m) {
287 mat2x4 __constructor (const mat4 m) {
294 mat2x4 __constructor (const mat2x3 m) {
301 mat2x4 __constructor (const mat3 m) {
308 mat2x4 __constructor (const mat4x3 m) {
315 mat2x4 __constructor (const mat2 m) {
322 mat2x4 __constructor (const mat3x2 m) {
329 mat2x4 __constructor (const mat4x2 m) {
337 mat3x2 __constructor (const mat3x2 m) {
341 mat3x2 __constructor (const mat4x2 m) {
349 mat3x2 __constructor (const mat3 m) {
357 mat3x2 __constructor (const mat3x4 m) {
365 mat3x2 __constructor (const mat4x3 m) {
373 mat3x2 __constructor (const mat4 m) {
381 mat3x2 __constructor (const mat2 m) {
389 mat3x2 __constructor (const mat2x3 m) {
397 mat3x2 __constructor (const mat2x4 m) {
406 mat3 __constructor (const mat3 m) {
410 mat3 __constructor (const mat4x3 m) {
418 mat3 __constructor (const mat3x4 m) {
426 mat3 __constructor (const mat4 m) {
434 mat3 __constructor (const mat2x3 m) {
442 mat3 __constructor (const mat2x4 m) {
450 mat3 __constructor (const mat3x2 m) {
458 mat3 __constructor (const mat4x2 m) {
466 mat3 __constructor (const mat2 m) {
475 mat3x4 __constructor (const mat3x4 m) {
479 mat3x4 __constructor (const mat4 m) {
487 mat3x4 __constructor (const mat3 m) {
495 mat3x4 __constructor (const mat4x3 m) {
503 mat3x4 __constructor (const mat2x4 m) {
511 mat3x4 __constructor (const mat2x3 m) {
519 mat3x4 __constructor (const mat3x2 m) {
527 mat3x4 __constructor (const mat4x2 m) {
535 mat3x4 __constructor (const mat2 m) {
544 mat4x2 __constructor (const mat4x2 m) {
548 mat4x2 __constructor (const mat4x3 m) {
557 mat4x2 __constructor (const mat4 m) {
566 mat4x2 __constructor (const mat3x2 m) {
574 mat4x2 __constructor (const mat3 m) {
583 mat4x2 __constructor (const mat3x4 m) {
592 mat4x2 __constructor (const mat2 m) {
601 mat4x2 __constructor (const mat2x3 m) {
610 mat4x2 __constructor (const mat2x4 m) {
620 mat4x3 __constructor (const mat4x3 m) {
624 mat4x3 __constructor (const mat4 m) {
633 mat4x3 __constructor (const mat3 m) {
642 mat4x3 __constructor (const mat3x4 m) {
651 mat4x3 __constructor (const mat4x2 m) {
660 mat4x3 __constructor (const mat2x3 m) {
669 mat4x3 __constructor (const mat3x2 m) {
678 mat4x3 __constructor (const mat2x4 m) {
687 mat4x3 __constructor (const mat2 m) {
697 mat4 __constructor (const mat4 m) {
701 mat4 __constructor (const mat3x4 m) {
710 mat4 __constructor (const mat4x3 m) {
719 mat4 __constructor (const mat2x4 m) {
728 mat4 __constructor (const mat4x2 m) {
737 mat4 __constructor (const mat3 m) {
746 mat4 __constructor (const mat2x3 m) {
755 mat4 __constructor (const mat3x2 m) {
764 mat4 __constructor (const mat2 m) {
774 void __operator += (inout mat2x3 m, const mat2x3 n) {
779 void __operator += (inout mat2x4 m, const mat2x4 n) {
784 void __operator += (inout mat3x2 m, const mat3x2 n) {
790 void __operator += (inout mat3x4 m, const mat3x4 n) {
796 void __operator += (inout mat4x2 m, const mat4x2 n) {
803 void __operator += (inout mat4x3 m, const mat4x3 n) {
811 void __operator -= (inout mat2x3 m, const mat2x3 n) {
816 void __operator -= (inout mat2x4 m, const mat2x4 n) {
821 void __operator -= (inout mat3x2 m, const mat3x2 n) {
827 void __operator -= (inout mat3x4 m, const mat3x4 n) {
833 void __operator -= (inout mat4x2 m, const mat4x2 n) {
840 void __operator -= (inout mat4x3 m, const mat4x3 n) {
848 void __operator /= (inout mat2x3 m, const mat2x3 n) {
853 void __operator /= (inout mat2x4 m, const mat2x4 n) {
858 void __operator /= (inout mat3x2 m, const mat3x2 n) {
864 void __operator /= (inout mat3x4 m, const mat3x4 n) {
870 void __operator /= (inout mat4x2 m, const mat4x2 n) {
877 void __operator /= (inout mat4x3 m, const mat4x3 n) {
885 vec3 __operator * (const mat2x3 m, const vec2 v) {
887 v.x * m[0].x + v.y * m[1].x,
888 v.x * m[0].y + v.y * m[1].y,
889 v.x * m[0].z + v.y * m[1].z
893 vec4 __operator * (const mat2x4 m, const vec2 v) {
895 v.x * m[0].x + v.y * m[1].x,
896 v.x * m[0].y + v.y * m[1].y,
897 v.x * m[0].z + v.y * m[1].z,
898 v.x * m[0].w + v.y * m[1].w
902 vec2 __operator * (const mat3x2 m, const vec3 v) {
904 v.x * m[0].x + v.y * m[1].x + v.z * m[2].x,
905 v.x * m[0].y + v.y * m[1].y + v.z * m[2].y
909 vec4 __operator * (const mat3x4 m, const vec3 v) {
911 v.x * m[0].x + v.y * m[1].x + v.z * m[2].x,
912 v.x * m[0].y + v.y * m[1].y + v.z * m[2].y,
913 v.x * m[0].z + v.y * m[1].z + v.z * m[2].z,
914 v.x * m[0].w + v.y * m[1].w + v.z * m[2].w
918 vec2 __operator * (const mat4x2 m, const vec4 v) {
920 v.x * m[0].x + v.y * m[1].x + v.z * m[2].x + v.w * m[3].x,
921 v.x * m[0].y + v.y * m[1].y + v.z * m[2].y + v.w * m[3].y
925 vec3 __operator * (const mat4x3 m, const vec4 v) {
927 v.x * m[0].x + v.y * m[1].x + v.z * m[2].x + v.w * m[3].x,
928 v.x * m[0].y + v.y * m[1].y + v.z * m[2].y + v.w * m[3].y,
929 v.x * m[0].z + v.y * m[1].z + v.z * m[2].z + v.w * m[3].z
934 mat3x2 __operator * (const mat2 m, const mat3x2 n) {
935 return mat3x2 (m * n[0], m * n[1], m * n[2]);
938 mat4x2 __operator * (const mat2 m, const mat4x2 n) {
939 return mat4x2 (m * n[0], m * n[1], m * n[2], m * n[3]);
943 mat2x3 __operator * (const mat2x3 m, const mat2 n) {
944 return mat2x3 (m * n[0], m * n[1]);
947 mat3 __operator * (const mat2x3 m, const mat3x2 n) {
948 return mat3 (m * n[0], m * n[1], m * n[2]);
951 mat4x3 __operator * (const mat2x3 m, const mat4x2 n) {
952 return mat4x3 (m * n[0], m * n[1], m * n[2], m * n[3]);
956 mat2x4 __operator * (const mat2x4 m, const mat2 n) {
957 return mat2x4 (m * n[0], m * n[1]);
960 mat3x4 __operator * (const mat2x4 m, const mat3x2 n) {
961 return mat3x4 (m * n[0], m * n[1], m * n[2]);
964 mat4 __operator * (const mat2x4 m, const mat4x2 n) {
965 return mat4 (m * n[0], m * n[1], m * n[2], m * n[3]);
969 mat2 __operator * (const mat3x2 m, const mat2x3 n) {
970 return mat2 (m * n[0], m * n[1]);
973 mat3x2 __operator * (const mat3x2 m, const mat3 n) {
974 return mat3x2 (m * n[0], m * n[1], m * n[2]);
977 mat4x2 __operator * (const mat3x2 m, const mat4x3 n) {
978 return mat4x2 (m * n[0], m * n[1], m * n[2], m * n[3]);
982 mat2x3 __operator * (const mat3 m, const mat2x3 n) {
983 return mat2x3 (m * n[0], m * n[1]);
986 mat4x3 __operator * (const mat3 m, const mat4x3 n) {
987 return mat4x3 (m * n[0], m * n[1], m * n[2], m * n[3]);
991 mat2x4 __operator * (const mat3x4 m, const mat2x3 n) {
992 return mat2x4 (m * n[0], m * n[1]);
995 mat3x4 __operator * (const mat3x4 m, const mat3 n) {
996 return mat3x4 (m * n[0], m * n[1], m * n[2]);
999 mat4 __operator * (const mat3x4 m, const mat4x3 n) {
1000 return mat4 (m * n[0], m * n[1], m * n[2], m * n[3]);
1004 mat2 __operator * (const mat4x2 m, const mat2x4 n) {
1005 return mat2 (m * n[0], m * n[1]);
1008 mat3x2 __operator * (const mat4x2 m, const mat3x4 n) {
1009 return mat3x2 (m * n[0], m * n[1], m * n[2]);
1012 mat4x2 __operator * (const mat4x2 m, const mat4 n) {
1013 return mat4x2 (m * n[0], m * n[1], m * n[2], m * n[3]);
1017 mat2x3 __operator * (const mat4x3 m, const mat2x4 n) {
1018 return mat2x3 (m * n[0], m * n[1]);
1021 mat3 __operator * (const mat4x3 m, const mat3x4 n) {
1022 return mat3 (m * n[0], m * n[1], m * n[2]);
1025 mat4x3 __operator * (const mat4x3 m, const mat4 n) {
1026 return mat4x3 (m * n[0], m * n[1], m * n[2], m * n[3]);
1030 mat2x4 __operator * (const mat4 m, const mat2x4 n) {
1031 return mat2x4 (m * n[0], m * n[1]);
1034 mat3x4 __operator * (const mat4 m, const mat3x4 n) {
1035 return mat3x4 (m * n[0], m * n[1], m * n[2]);
1039 void __operator *= (inout mat2x3 m, const mat2 n) {
1043 void __operator *= (inout mat2x4 m, const mat2 n) {
1047 void __operator *= (inout mat3x2 m, const mat3 n) {
1051 void __operator *= (inout mat3x4 m, const mat3 n) {
1055 void __operator *= (inout mat4x2 m, const mat4 n) {
1059 void __operator *= (inout mat4x3 m, const mat4 n) {
1064 vec3 __operator * (const vec2 v, const mat3x2 m) {
1066 v.x * m[0].x + v.y * m[0].y,
1067 v.x * m[1].x + v.y * m[1].y,
1068 v.x * m[2].x + v.y * m[2].y
1072 vec4 __operator * (const vec2 v, const mat4x2 m) {
1074 v.x * m[0].x + v.y * m[0].y,
1075 v.x * m[1].x + v.y * m[1].y,
1076 v.x * m[2].x + v.y * m[2].y,
1077 v.x * m[3].x + v.y * m[3].y
1081 vec2 __operator * (const vec3 v, const mat2x3 m) {
1083 v.x * m[0].x + v.y * m[0].y + v.z * m[0].z,
1084 v.x * m[1].x + v.y * m[1].y + v.z * m[1].z
1088 vec4 __operator * (const vec3 v, const mat4x3 m) {
1090 v.x * m[0].x + v.y * m[0].y + v.z * m[0].z,
1091 v.x * m[1].x + v.y * m[1].y + v.z * m[1].z,
1092 v.x * m[2].x + v.y * m[2].y + v.z * m[2].z,
1093 v.x * m[3].x + v.y * m[3].y + v.z * m[3].z
1097 vec2 __operator * (const vec4 v, const mat2x4 m) {
1099 v.x * m[0].x + v.y * m[0].y + v.z * m[0].z + v.w * m[0].w,
1100 v.x * m[1].x + v.y * m[1].y + v.z * m[1].z + v.w * m[1].w
1104 vec3 __operator * (const vec4 v, const mat3x4 m) {
1106 v.x * m[0].x + v.y * m[0].y + v.z * m[0].z + v.w * m[0].w,
1107 v.x * m[1].x + v.y * m[1].y + v.z * m[1].z + v.w * m[1].w,
1108 v.x * m[2].x + v.y * m[2].y + v.z * m[2].z + v.w * m[2].w
1113 void __operator += (inout mat2x3 m, const float a) {
1118 void __operator += (inout mat2x4 m, const float a) {
1123 void __operator += (inout mat3x2 m, const float a) {
1129 void __operator += (inout mat3x4 m, const float a) {
1135 void __operator += (inout mat4x2 m, const float a) {
1142 void __operator += (inout mat4x3 m, const float a) {
1150 void __operator -= (inout mat2x3 m, const float a) {
1155 void __operator -= (inout mat2x4 m, const float a) {
1160 void __operator -= (inout mat3x2 m, const float a) {
1166 void __operator -= (inout mat3x4 m, const float a) {
1172 void __operator -= (inout mat4x2 m, const float a) {
1179 void __operator -= (inout mat4x3 m, const float a) {
1187 void __operator *= (inout mat2x3 m, const float a) {
1192 void __operator *= (inout mat2x4 m, const float a) {
1197 void __operator *= (inout mat3x2 m, const float a) {
1203 void __operator *= (inout mat3x4 m, const float a) {
1209 void __operator *= (inout mat4x2 m, const float a) {
1216 void __operator *= (inout mat4x3 m, const float a) {
1224 void __operator /= (inout mat2x3 m, const float a) {
1229 void __operator /= (inout mat2x4 m, const float a) {
1234 void __operator /= (inout mat3x2 m, const float a) {
1240 void __operator /= (inout mat3x4 m, const float a) {
1246 void __operator /= (inout mat4x2 m, const float a) {
1253 void __operator /= (inout mat4x3 m, const float a) {
1261 mat2x3 __operator + (const mat2x3 m, const mat2x3 n) {
1262 return mat2x3 (m[0] + n[0], m[1] + n[1]);
1265 mat2x4 __operator + (const mat2x4 m, const mat2x4 n) {
1266 return mat2x4 (m[0] + n[0], m[1] + n[1]);
1269 mat3x2 __operator + (const mat3x2 m, const mat3x2 n) {
1270 return mat3x2 (m[0] + n[0], m[1] + n[1], m[2] + n[2]);
1273 mat3x4 __operator + (const mat3x4 m, const mat3x4 n) {
1274 return mat3x4 (m[0] + n[0], m[1] + n[1], m[2] + n[2]);
1277 mat4x2 __operator + (const mat4x2 m, const mat4x2 n) {
1278 return mat4x2 (m[0] + n[0], m[1] + n[1], m[2] + n[2], m[3] + n[3]);
1281 mat4x3 __operator + (const mat4x3 m, const mat4x3 n) {
1282 return mat4x3 (m[0] + n[0], m[1] + n[1], m[2] + n[2], m[3] + n[3]);
1286 mat2x3 __operator - (const mat2x3 m, const mat2x3 n) {
1287 return mat2x3 (m[0] - n[0], m[1] - n[1]);
1290 mat2x4 __operator - (const mat2x4 m, const mat2x4 n) {
1291 return mat2x4 (m[0] - n[0], m[1] - n[1]);
1294 mat3x2 __operator - (const mat3x2 m, const mat3x2 n) {
1295 return mat3x2 (m[0] - n[0], m[1] - n[1], m[2] - n[2]);
1298 mat3x4 __operator - (const mat3x4 m, const mat3x4 n) {
1299 return mat3x4 (m[0] - n[0], m[1] - n[1], m[2] - n[2]);
1302 mat4x2 __operator - (const mat4x2 m, const mat4x2 n) {
1303 return mat4x2 (m[0] - n[0], m[1] - n[1], m[2] - n[2], m[3] - n[3]);
1306 mat4x3 __operator - (const mat4x3 m, const mat4x3 n) {
1307 return mat4x3 (m[0] - n[0], m[1] - n[1], m[2] - n[2], m[3] - n[3]);
1311 mat2x3 __operator / (const mat2x3 m, const mat2x3 n) {
1312 return mat2x3 (m[0] / n[0], m[1] / n[1]);
1315 mat2x4 __operator / (const mat2x4 m, const mat2x4 n) {
1316 return mat2x4 (m[0] / n[0], m[1] / n[1]);
1319 mat3x2 __operator / (const mat3x2 m, const mat3x2 n) {
1320 return mat3x2 (m[0] / n[0], m[1] / n[1], m[2] / n[2]);
1323 mat3x4 __operator / (const mat3x4 m, const mat3x4 n) {
1324 return mat3x4 (m[0] / n[0], m[1] / n[1], m[2] / n[2]);
1327 mat4x2 __operator / (const mat4x2 m, const mat4x2 n) {
1328 return mat4x2 (m[0] / n[0], m[1] / n[1], m[2] / n[2], m[3] / n[3]);
1331 mat4x3 __operator / (const mat4x3 m, const mat4x3 n) {
1332 return mat4x3 (m[0] / n[0], m[1] / n[1], m[2] / n[2], m[3] / n[3]);
1336 mat2x3 __operator + (const float a, const mat2x3 n) {
1337 return mat2x3 (a + n[0], a + n[1]);
1340 mat2x3 __operator + (const mat2x3 m, const float b) {
1341 return mat2x3 (m[0] + b, m[1] + b);
1344 mat2x4 __operator + (const float a, const mat2x4 n) {
1345 return mat2x4 (a + n[0], a + n[1]);
1348 mat2x4 __operator + (const mat2x4 m, const float b) {
1349 return mat2x4 (m[0] + b, m[1] + b);
1352 mat3x2 __operator + (const float a, const mat3x2 n) {
1353 return mat3x2 (a + n[0], a + n[1], a + n[2]);
1356 mat3x2 __operator + (const mat3x2 m, const float b) {
1357 return mat3x2 (m[0] + b, m[1] + b, m[2] + b);
1360 mat3x4 __operator + (const float a, const mat3x4 n) {
1361 return mat3x4 (a + n[0], a + n[1], a + n[2]);
1364 mat3x4 __operator + (const mat3x4 m, const float b) {
1365 return mat3x4 (m[0] + b, m[1] + b, m[2] + b);
1368 mat4x2 __operator + (const mat4x2 m, const float b) {
1369 return mat4x2 (m[0] + b, m[1] + b, m[2] + b, m[3] + b);
1372 mat4x2 __operator + (const float a, const mat4x2 n) {
1373 return mat4x2 (a + n[0], a + n[1], a + n[2], a + n[3]);
1376 mat4x3 __operator + (const mat4x3 m, const float b) {
1377 return mat4x3 (m[0] + b, m[1] + b, m[2] + b, m[3] + b);
1380 mat4x3 __operator + (const float a, const mat4x3 n) {
1381 return mat4x3 (a + n[0], a + n[1], a + n[2], a + n[3]);
1385 mat2x3 __operator - (const float a, const mat2x3 n) {
1386 return mat2x3 (a - n[0], a - n[1]);
1389 mat2x3 __operator - (const mat2x3 m, const float b) {
1390 return mat2x3 (m[0] - b, m[1] - b);
1393 mat2x4 __operator - (const float a, const mat2x4 n) {
1394 return mat2x4 (a - n[0], a - n[1]);
1397 mat2x4 __operator - (const mat2x4 m, const float b) {
1398 return mat2x4 (m[0] - b, m[1] - b);
1401 mat3x2 __operator - (const float a, const mat3x2 n) {
1402 return mat3x2 (a - n[0], a - n[1], a - n[2]);
1405 mat3x2 __operator - (const mat3x2 m, const float b) {
1406 return mat3x2 (m[0] - b, m[1] - b, m[2] - b);
1409 mat3x4 __operator - (const float a, const mat3x4 n) {
1410 return mat3x4 (a - n[0], a - n[1], a - n[2]);
1413 mat3x4 __operator - (const mat3x4 m, const float b) {
1414 return mat3x4 (m[0] - b, m[1] - b, m[2] - b);
1417 mat4x2 __operator - (const mat4x2 m, const float b) {
1418 return mat4x2 (m[0] - b, m[1] - b, m[2] - b, m[3] - b);
1421 mat4x2 __operator - (const float a, const mat4x2 n) {
1422 return mat4x2 (a - n[0], a - n[1], a - n[2], a - n[3]);
1425 mat4x3 __operator - (const mat4x3 m, const float b) {
1426 return mat4x3 (m[0] - b, m[1] - b, m[2] - b, m[3] - b);
1429 mat4x3 __operator - (const float a, const mat4x3 n) {
1430 return mat4x3 (a - n[0], a - n[1], a - n[2], a - n[3]);
1434 mat2x3 __operator * (const float a, const mat2x3 n) {
1435 return mat2x3 (a * n[0], a * n[1]);
1438 mat2x3 __operator * (const mat2x3 m, const float b) {
1439 return mat2x3 (m[0] * b, m[1] * b);
1442 mat2x4 __operator * (const float a, const mat2x4 n) {
1443 return mat2x4 (a * n[0], a * n[1]);
1446 mat2x4 __operator * (const mat2x4 m, const float b) {
1447 return mat2x4 (m[0] * b, m[1] * b);
1450 mat3x2 __operator * (const float a, const mat3x2 n) {
1451 return mat3x2 (a * n[0], a * n[1], a * n[2]);
1454 mat3x2 __operator * (const mat3x2 m, const float b) {
1455 return mat3x2 (m[0] * b, m[1] * b, m[2] * b);
1458 mat3x4 __operator * (const float a, const mat3x4 n) {
1459 return mat3x4 (a * n[0], a * n[1], a * n[2]);
1462 mat3x4 __operator * (const mat3x4 m, const float b) {
1463 return mat3x4 (m[0] * b, m[1] * b, m[2] * b);
1466 mat4x2 __operator * (const mat4x2 m, const float b) {
1467 return mat4x2 (m[0] * b, m[1] * b, m[2] * b, m[3] * b);
1470 mat4x2 __operator * (const float a, const mat4x2 n) {
1471 return mat4x2 (a * n[0], a * n[1], a * n[2], a * n[3]);
1474 mat4x3 __operator * (const mat4x3 m, const float b) {
1475 return mat4x3 (m[0] * b, m[1] * b, m[2] * b, m[3] * b);
1478 mat4x3 __operator * (const float a, const mat4x3 n) {
1479 return mat4x3 (a * n[0], a * n[1], a * n[2], a * n[3]);
1483 mat2x3 __operator / (const float a, const mat2x3 n) {
1484 return mat2x3 (a / n[0], a / n[1]);
1487 mat2x3 __operator / (const mat2x3 m, const float b) {
1488 return mat2x3 (m[0] / b, m[1] / b);
1491 mat2x4 __operator / (const float a, const mat2x4 n) {
1492 return mat2x4 (a / n[0], a / n[1]);
1495 mat2x4 __operator / (const mat2x4 m, const float b) {
1496 return mat2x4 (m[0] / b, m[1] / b);
1499 mat3x2 __operator / (const float a, const mat3x2 n) {
1500 return mat3x2 (a / n[0], a / n[1], a / n[2]);
1503 mat3x2 __operator / (const mat3x2 m, const float b) {
1504 return mat3x2 (m[0] / b, m[1] / b, m[2] / b);
1507 mat3x4 __operator / (const float a, const mat3x4 n) {
1508 return mat3x4 (a / n[0], a / n[1], a / n[2]);
1511 mat3x4 __operator / (const mat3x4 m, const float b) {
1512 return mat3x4 (m[0] / b, m[1] / b, m[2] / b);
1515 mat4x2 __operator / (const mat4x2 m, const float b) {
1516 return mat4x2 (m[0] / b, m[1] / b, m[2] / b, m[3] / b);
1519 mat4x2 __operator / (const float a, const mat4x2 n) {
1520 return mat4x2 (a / n[0], a / n[1], a / n[2], a / n[3]);
1523 mat4x3 __operator / (const mat4x3 m, const float b) {
1524 return mat4x3 (m[0] / b, m[1] / b, m[2] / b, m[3] / b);
1527 mat4x3 __operator / (const float a, const mat4x3 n) {
1528 return mat4x3 (a / n[0], a / n[1], a / n[2], a / n[3]);
1532 mat2x3 __operator - (const mat2x3 m) {
1533 return mat2x3 (-m[0], -m[1]);
1536 mat2x4 __operator - (const mat2x4 m) {
1537 return mat2x4 (-m[0], -m[1]);
1540 mat3x2 __operator - (const mat3x2 m) {
1541 return mat3x2 (-m[0], -m[1], -m[2]);
1544 mat3x4 __operator - (const mat3x4 m) {
1545 return mat3x4 (-m[0], -m[1], -m[2]);
1548 mat4x2 __operator - (const mat4x2 m) {
1549 return mat4x2 (-m[0], -m[1], -m[2], -m[3]);
1552 mat4x3 __operator - (const mat4x3 m) {
1553 return mat4x3 (-m[0], -m[1], -m[2], -m[3]);
1557 void __operator -- (inout mat2x3 m) {
1562 void __operator -- (inout mat2x4 m) {
1567 void __operator -- (inout mat3x2 m) {
1573 void __operator -- (inout mat3x4 m) {
1579 void __operator -- (inout mat4x2 m) {
1586 void __operator -- (inout mat4x3 m) {
1594 void __operator ++ (inout mat2x3 m) {
1599 void __operator ++ (inout mat2x4 m) {
1604 void __operator ++ (inout mat3x2 m) {
1610 void __operator ++ (inout mat3x4 m) {
1616 void __operator ++ (inout mat4x2 m) {
1623 void __operator ++ (inout mat4x3 m) {
1631 mat2x3 __operator -- (inout mat2x3 m, const int) {
1632 return mat2x3 (m[0]--, m[1]--);
1635 mat2x4 __operator -- (inout mat2x4 m, const int) {
1636 return mat2x4 (m[0]--, m[1]--);
1639 mat3x2 __operator -- (inout mat3x2 m, const int) {
1640 return mat3x2 (m[0]--, m[1]--, m[2]--);
1643 mat3x4 __operator -- (inout mat3x4 m, const int) {
1644 return mat3x4 (m[0]--, m[1]--, m[2]--);
1647 mat4x2 __operator -- (inout mat4x2 m, const int) {
1648 return mat4x2 (m[0]--, m[1]--, m[2]--, m[3]--);
1651 mat4x3 __operator -- (inout mat4x3 m, const int) {
1652 return mat4x3 (m[0]--, m[1]--, m[2]--, m[3]--);
1656 mat2x3 __operator ++ (inout mat2x3 m, const int) {
1657 return mat2x3 (m[0]++, m[1]++);
1660 mat2x4 __operator ++ (inout mat2x4 m, const int) {
1661 return mat2x4 (m[0]++, m[1]++);
1664 mat3x2 __operator ++ (inout mat3x2 m, const int) {
1665 return mat3x2 (m[0]++, m[1]++, m[2]++);
1668 mat3x4 __operator ++ (inout mat3x4 m, const int) {
1669 return mat3x4 (m[0]++, m[1]++, m[2]++);
1672 mat4x2 __operator ++ (inout mat4x2 m, const int) {
1673 return mat4x2 (m[0]++, m[1]++, m[2]++, m[3]++);
1676 mat4x3 __operator ++ (inout mat4x3 m, const int) {
1677 return mat4x3 (m[0]++, m[1]++, m[2]++, m[3]++);
1681 void printMESA (const mat2x3 m) {
1686 void printMESA (const mat2x4 m) {
1691 void printMESA (const mat3x2 m) {
1697 void printMESA (const mat3x4 m) {
1703 void printMESA (const mat4x2 m) {
1710 void printMESA (const mat4x3 m) {