From 0d1fd47715105bab6b5ebe60842832a9f4ec2ad7 Mon Sep 17 00:00:00 2001 From: tali Date: Mon, 22 Jan 2024 13:18:59 -0500 Subject: [PATCH] Adam.Mat2A code cleanup --- src/adam/adam.ml | 83 ++++++++++-------------------------------------- src/n2/n2.ml | 4 +-- 2 files changed, 19 insertions(+), 68 deletions(-) diff --git a/src/adam/adam.ml b/src/adam/adam.ml index cdb32b5..9054964 100644 --- a/src/adam/adam.ml +++ b/src/adam/adam.ml @@ -49,8 +49,7 @@ module Vec2 = struct let pp ppf { x; y } = Format.fprintf ppf "[%.1f; %.1f]" x y - let[@inline] make (x : float) (y : float) : t = - { x; y } + let[@inline] make x y = { x; y } let[@inline] set ~x ~y t = begin @@ -84,19 +83,17 @@ module Mat2A = struct let pp ppf { a0; a1; a2; a3; a4; a5 } = Format.fprintf ppf "[%.1f %.1f %.1f; %.1f %.1f %.1f]" a0 a1 a2 a3 a4 a5 - let[@inline] make (tx : float) (ty : float) (sx : float) (sy : float) : t = - { a0 = sx; a1 = 0.0; a2 = tx; a3 = 0.0; a4 = sy; a5 = ty } + (* TODO: skew/rotation *) - (* TODO: rotation *) + let[@inline] make ?(tx = 0.0) ?(ty = 0.0) ?(sx = 1.0) ?(sy = 1.0) () = { + a0 = sx; a1 = 0.0; a2 = tx; + a3 = 0.0; a4 = sy; a5 = ty; + } let[@inline] set ~tx ~ty ~sx ~sy t = begin - t.a0 <- sx; - t.a1 <- 0.0; - t.a2 <- tx; - t.a3 <- 0.0; - t.a4 <- sy; - t.a5 <- ty; + t.a0 <- sx; t.a1 <- 0.0; t.a2 <- tx; + t.a3 <- 0.0; t.a4 <- sy; t.a5 <- ty; end let[@inline] copy ~src dst = @@ -109,61 +106,15 @@ module Mat2A = struct dst.a5 <- src.a5; end - let[@inline] multiply (dst : t) (lhs : t) (rhs : t) : unit = + let[@inline] multiply dst lhs rhs = + assert (dst != lhs && dst != rhs); begin - dst.a0 <- (lhs.a0 * rhs.a0) + (lhs.a1 * rhs.a3); - dst.a1 <- (lhs.a0 * rhs.a1) + (lhs.a1 * rhs.a4); - dst.a2 <- (lhs.a0 * rhs.a2) + (lhs.a1 * rhs.a5) + lhs.a2; - dst.a3 <- (lhs.a3 * rhs.a0) + (lhs.a4 * rhs.a3); - dst.a4 <- (lhs.a3 * rhs.a1) + (lhs.a4 * rhs.a4); - dst.a5 <- (lhs.a3 * rhs.a2) + (lhs.a4 * rhs.a5) + lhs.a5; - end - - (* - let[@inline] tra (dst : t) ~(tx : float) ~(ty : float) = - begin - dst.a2 <- (dst.a0 * tx) + (dst.a1 * ty) + dst.a2; - dst.a5 <- (dst.a3 * tx) + (dst.a4 * ty) + dst.a5; - end - - let[@inline] sca (dst : t) ~(sx : float) ~(sy : float) = - begin - dst.a0 <- dst.a0 * sx; - dst.a1 <- dst.a1 * sy; - dst.a3 <- dst.a3 * sx; - dst.a4 <- dst.a4 * sy; - end - - let inv (dst : t) (src : t) = - begin - let { a0; a1; a2; a3; a4; a5 } = src in - let b2 = (a1 * a5) - (a2 * a4) in - let b5 = (a2 * a3) - (a0 * a5) in - let det = (a0 * a4) - (a1 * a3) in - dst.a0 <- a4 / det; - dst.a1 <- a1 / -det; - dst.a2 <- b2 / det; - dst.a3 <- a3 / -det; - dst.a4 <- a0 / det; - dst.a5 <- b5 / det; - end -*) - - let apply (t : t) (v : vec2) = - let Vec2.{ x; y } = v in - begin - v.x <- (t.a0 * x) + (t.a1 * y) + t.a2; - v.y <- (t.a3 * x) + (t.a4 * y) + t.a5; - end - - let apply_inv (t : t) (v : vec2) = - let Vec2.{ x; y } = v in - let b2 = (t.a1 * t.a5) - (t.a2 * t.a4) in - let b5 = (t.a2 * t.a3) - (t.a0 * t.a5) in - let det = (t.a0 * t.a4) - (t.a1 * t.a3) in - begin - v.x <- ((t.a4 * x) - (t.a1 * y) + b2) / det; - v.y <- ((t.a0 * y) - (t.a3 * x) + b5) / det; + dst.a0 <- lhs.a0 * rhs.a0 + lhs.a1 * rhs.a3; + dst.a1 <- lhs.a0 * rhs.a1 + lhs.a1 * rhs.a4; + dst.a2 <- lhs.a0 * rhs.a2 + lhs.a1 * rhs.a5 + lhs.a2; + dst.a3 <- lhs.a3 * rhs.a0 + lhs.a4 * rhs.a3; + dst.a4 <- lhs.a3 * rhs.a1 + lhs.a4 * rhs.a4; + dst.a5 <- lhs.a3 * rhs.a2 + lhs.a4 * rhs.a5 + lhs.a5; end end @@ -235,7 +186,7 @@ module Color = struct set_rgb24 dst v ~a; dst - let[@inline] mul ?(r = 1.) ?(g = 1.) ?(b = 1.) ?(a = 1.) (t : t) = + let[@inline] multiply ?(r = 1.) ?(g = 1.) ?(b = 1.) ?(a = 1.) (t : t) = begin t.r <- t.r * r * a; t.g <- t.g * g * a; diff --git a/src/n2/n2.ml b/src/n2/n2.ml index fe620f8..32ba11a 100644 --- a/src/n2/n2.ml +++ b/src/n2/n2.ml @@ -36,11 +36,11 @@ module Transform_graph = struct t.size <- t.size + 1 let add t parent = - let model_tf = mat2a 0.0 0.0 1.0 1.0 in + let model_tf = mat2a () in let parent_tf, world_tf = match parent with | Null -> None, model_tf - | Node p -> Some p.world_tf, mat2a 0.0 0.0 1.0 1.0 + | Node p -> Some p.world_tf, mat2a () in let node = Node {