Parcourir la source

added cross, length

ncannasse il y a 10 ans
Parent
commit
64e565c22a
1 fichiers modifiés avec 26 ajouts et 0 suppressions
  1. 26 0
      hxsl/AgalOut.hx

+ 26 - 0
hxsl/AgalOut.hx

@@ -482,6 +482,32 @@ class AgalOut {
 			var r = allocReg(e.t);
 			op(OMul(r, expr(e), getConst(180 / Math.PI)));
 			return r;
+		case [Cross, [a, b]]:
+			var r = allocReg(a.t);
+			op(OCrs(r, expr(a), expr(b)));
+			return r;
+		case [Length, [e]]:
+			var r = allocReg(TFloat);
+			switch( e.t  ) {
+			case TFloat:
+				op(OAbs(r, expr(e)));
+				return r;
+			case TVec(2, VFloat):
+				var e = expr(e);
+				var tmp = allocReg(TVec(3,VFloat));
+				op(OMul(swiz(tmp, [X, Y]), e, e));
+				op(OAdd(r, swiz(tmp, [X]), swiz(tmp, [Y])));
+			case TVec(3, VFloat):
+				var e = expr(e);
+				op(ODp3(r, e, e));
+			case TVec(4, VFloat):
+				var e = expr(e);
+				op(ODp4(r, e, e));
+			default:
+				throw "TODO length(" + e.t + ")";
+			}
+			op(OSqt(r, r));
+			return r;
 
 		case [Mix, [a, b, t]]:
 			var ra = allocReg(a.t);