Make use of runtime.Raw_* types in core:math/linalg

This commit is contained in:
Feoramund
2024-06-03 15:58:33 -04:00
parent 97f1d12e04
commit 88598c2c64
+10 -15
View File
@@ -3,6 +3,7 @@ package linalg
import "core:math" import "core:math"
import "base:builtin" import "base:builtin"
import "base:intrinsics" import "base:intrinsics"
import "base:runtime"
// Generic // Generic
@@ -223,33 +224,27 @@ quaternion_mul_quaternion :: proc "contextless" (q1, q2: $Q) -> Q where IS_QUATE
@(require_results) @(require_results)
quaternion64_mul_vector3 :: proc "contextless" (q: $Q/quaternion64, v: $V/[3]$F/f16) -> V { quaternion64_mul_vector3 :: proc "contextless" (q: $Q/quaternion64, v: $V/[3]$F/f16) -> V {
Raw_Quaternion :: struct {xyz: [3]f16, r: f16} q := transmute(runtime.Raw_Quaternion64_Vector_Scalar)q
q := transmute(Raw_Quaternion)q
v := v v := v
t := cross(2*q.xyz, v) t := cross(2*q.vector, v)
return V(v + q.r*t + cross(q.xyz, t)) return V(v + q.scalar*t + cross(q.vector, t))
} }
@(require_results) @(require_results)
quaternion128_mul_vector3 :: proc "contextless" (q: $Q/quaternion128, v: $V/[3]$F/f32) -> V { quaternion128_mul_vector3 :: proc "contextless" (q: $Q/quaternion128, v: $V/[3]$F/f32) -> V {
Raw_Quaternion :: struct {xyz: [3]f32, r: f32} q := transmute(runtime.Raw_Quaternion128_Vector_Scalar)q
q := transmute(Raw_Quaternion)q
v := v v := v
t := cross(2*q.xyz, v) t := cross(2*q.vector, v)
return V(v + q.r*t + cross(q.xyz, t)) return V(v + q.scalar*t + cross(q.vector, t))
} }
@(require_results) @(require_results)
quaternion256_mul_vector3 :: proc "contextless" (q: $Q/quaternion256, v: $V/[3]$F/f64) -> V { quaternion256_mul_vector3 :: proc "contextless" (q: $Q/quaternion256, v: $V/[3]$F/f64) -> V {
Raw_Quaternion :: struct {xyz: [3]f64, r: f64} q := transmute(runtime.Raw_Quaternion256_Vector_Scalar)q
q := transmute(Raw_Quaternion)q
v := v v := v
t := cross(2*q.xyz, v) t := cross(2*q.vector, v)
return V(v + q.r*t + cross(q.xyz, t)) return V(v + q.scalar*t + cross(q.vector, t))
} }
quaternion_mul_vector3 :: proc{quaternion64_mul_vector3, quaternion128_mul_vector3, quaternion256_mul_vector3} quaternion_mul_vector3 :: proc{quaternion64_mul_vector3, quaternion128_mul_vector3, quaternion256_mul_vector3}