1 module matmul; 2 3 import std.stdio; 4 5 extern(C) int glm_matmul(int iter); 6 7 int glmMatMul(int iter) 8 { 9 return glm_matmul(iter); 10 } 11 12 int gfxMatMul(int iter) 13 { 14 import gfx.math; 15 const axis = fvec(1, 2, 3); 16 const sc = fvec(0.5, 2, 0.5); 17 const tr = fvec(4, 5, 6); 18 const even = rotation(0.01, axis) * scale(sc) * translation(tr); 19 const odd = rotation(0.01, axis) * scale(1f / sc) * translation(-tr); 20 auto m = FMat4.identity; 21 22 foreach (i; 0 .. iter) { 23 if (i % 2) { 24 m = odd * m; 25 } 26 else { 27 m = even * m; 28 } 29 } 30 31 // writeln("gfx:", m); 32 if (m == FMat4.identity) { 33 writeln("only to make sure computation is not optimized away"); 34 } 35 36 return iter; 37 } 38 39 40 int gl3nMatMul(int iter) 41 { 42 import gl3n.linalg; 43 const axis = vec3(1, 2, 3); 44 const sc = vec3(0.5, 2, 0.5); 45 const tr = vec3(4, 5, 6); 46 const r = quat.axis_rotation(0.01, axis.normalized).to_matrix!(4, 4); 47 const even = r * mat4.scaling(sc.x, sc.y, sc.z) * mat4.translation(tr); 48 const odd = r * mat4.scaling(1f/sc.x, 1f/sc.y, 1f/sc.z) * mat4.translation(-tr); 49 auto m = mat4.identity; 50 51 foreach (i; 0 .. iter) { 52 if (i % 2) { 53 m = odd * m; 54 } 55 else { 56 m = even * m; 57 } 58 } 59 60 //writeln("gl3n:", m); 61 if (m == mat4.identity) { 62 writeln("only to make sure computation is not optimized away"); 63 } 64 return iter; 65 } 66