UN_INLINE float2 un_m_add2f(float2 a, float2 b) { float2 result; result.x = a.x + b.x; result.y = a.y + b.y; return result; } UN_INLINE float3 un_m_add3f(float3 a, float3 b) { float3 result; result.x = a.x + b.x; result.y = a.y + b.y; result.z = a.z + b.z; return result; } UN_INLINE float4 un_m_add4f(float4 a, float4 b) { float4 result; result.x = a.x + b.x; result.y = a.y + b.y; result.z = a.z + b.z; result.w = a.w + b.w; return result; } UN_INLINE float2 un_m_sub2f(float2 a, float2 b) { float2 result; result.x = a.x - b.x; result.y = a.y - b.y; return result; } UN_INLINE float3 un_m_sub3f(float3 a, float3 b) { float3 result; result.x = a.x - b.x; result.y = a.y - b.y; result.z = a.z - b.z; return result; } UN_INLINE float4 un_m_sub4f(float4 a, float4 b) { float4 result; result.x = a.x - b.x; result.y = a.y - b.y; result.z = a.z - b.z; result.w = a.w - b.w; return result; } UN_INLINE float2 un_m_add_scalar2f(float2 a, float scalar) { float2 result; result.x = a.x + scalar; result.y = a.y + scalar; return result; } UN_INLINE float3 un_m_add_scalar3f(float3 a, float scalar) { float3 result; result.x = a.x + scalar; result.y = a.y + scalar; result.z = a.z + scalar; return result; } UN_INLINE float4 un_m_add_scalar4f(float4 a, float scalar) { float4 result; result.x = a.x + scalar; result.y = a.y + scalar; result.z = a.z + scalar; result.w = a.w + scalar; return result; } UN_INLINE float2 un_m_sub_scalar2f(float2 a, float scalar) { float2 result; result.x = a.x - scalar; result.y = a.y - scalar; return result; } UN_INLINE float3 un_m_sub_scalar3f(float3 a, float scalar) { float3 result; result.x = a.x - scalar; result.y = a.y - scalar; result.z = a.z - scalar; return result; } UN_INLINE float4 un_m_sub_scalar4f(float4 a, float scalar) { float4 result; result.x = a.x - scalar; result.y = a.y - scalar; result.z = a.z - scalar; result.w = a.w - scalar; return result; } UN_INLINE float2 un_m_mul_scalar2f(float2 a, float scalar) { float2 result; result.x = a.x * scalar; result.y = a.y * scalar; return result; } UN_INLINE float3 un_m_mul_scalar3f(float3 a, float scalar) { float3 result; result.x = a.x * scalar; result.y = a.y * scalar; result.z = a.z * scalar; return result; } UN_INLINE float4 un_m_mul_scalar4f(float4 a, float scalar) { float4 result; result.x = a.x * scalar; result.y = a.y * scalar; result.z = a.z * scalar; result.w = a.w * scalar; return result; } UN_INLINE float2 un_m_div_scalar2f(float2 a, float scalar) { float2 result; result.x = a.x / scalar; result.y = a.y / scalar; return result; } UN_INLINE float3 un_m_div_scalar3f(float3 a, float scalar) { float3 result; result.x = a.x / scalar; result.y = a.y / scalar; result.z = a.z / scalar; return result; } UN_INLINE float4 un_m_div_scalar4f(float4 a, float scalar) { float4 result; result.x = a.x / scalar; result.y = a.y / scalar; result.z = a.z / scalar; result.w = a.w / scalar; return result; } UN_INLINE float un_m_dot2f(float2 a, float2 b) { return a.x * b.x + a.y * b.y; } UN_INLINE float un_m_dot3f(float3 a, float3 b) { return a.x * b.x + a.y * b.y + a.z * b.z; } UN_INLINE float un_m_dot4f(float4 a, float4 b) { return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; } UN_INLINE float2 un_m_hadamard2f(float2 a, float2 b) { float2 result; result.x = a.x * b.x; result.y = a.y * b.y; return result; } UN_INLINE float3 un_m_hadamard3f(float3 a, float3 b) { float3 result; result.x = a.x * b.x; result.y = a.y * b.y; result.z = a.z * b.z; return result; } UN_INLINE float4 un_m_hadamard4f(float4 a, float4 b) { float4 result; result.x = a.x * b.x; result.y = a.y * b.y; result.z = a.z * b.z; result.w = a.w * b.w; return result; } UN_INLINE float2 un_m_cross2f(float2 a) { float2 result; result.x = a.y; result.y =-a.x; return result; } UN_INLINE float3 un_m_cross3f(float3 a, float3 b) { float3 result; result.x = a.y * b.z - a.z * b.y; result.y = a.z * b.x - a.x * b.z; result.z = a.x * b.y - a.y * b.x; return result; } UN_INLINE float un_m_magnitude2f(float2 a) { return sqrtf(a.x * a.x + a.y * a.y); } UN_INLINE float un_m_magnitude3f(float3 a) { return sqrtf(a.x * a.x + a.y * a.y + a.z * a.z); } UN_INLINE float un_m_magnitude4f(float4 a) { return sqrtf(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w); } UN_INLINE float un_m_magnitude_sqr2f(float2 a) { return a.x * a.x + a.y * a.y; } UN_INLINE float un_m_magnitude_sqr3f(float3 a) { return a.x * a.x + a.y * a.y + a.z * a.z; } UN_INLINE float un_m_magnitude_sqr4f(float4 a) { return a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w; } UN_INLINE float un_m_distance2f(float2 a, float2 b) { float2 result; result.x = b.x - a.x; result.y = b.y - a.y; return sqrtf(result.x * result.x + result.y * result.y); } UN_INLINE float un_m_distance3f(float3 a, float3 b) { float3 result; result.x = b.x - a.x; result.y = b.y - a.y; result.z = b.z - a.z; return sqrtf(result.x * result.x + result.y * result.y + result.z * result.z); } UN_INLINE float un_m_distance4f(float4 a, float4 b) { float4 result; result.x = b.x - a.x; result.y = b.y - a.y; result.z = b.z - a.z; result.w = b.w - a.w; return sqrtf(result.x * result.x + result.y * result.y + result.z * result.z + result.w * result.w); } UN_INLINE float un_m_distance_sqr2f(float2 a, float2 b) { float2 result; result.x = b.x - a.x; result.y = b.y - a.y; return result.x * result.x + result.y * result.y; } UN_INLINE float un_m_distance_sqr3f(float3 a, float3 b) { float3 result; result.x = b.x - a.x; result.y = b.y - a.y; result.z = b.z - a.z; return result.x * result.x + result.y * result.y + result.z * result.z; } UN_INLINE float un_m_distance_sqr4f(float4 a, float4 b) { float4 result; result.x = b.x - a.x; result.y = b.y - a.y; result.z = b.z - a.z; result.w = b.w - a.w; return result.x * result.x + result.y * result.y + result.z * result.z + result.w * result.w; } UN_INLINE float2 un_m_normalize2f(float2 a) { float2 result; float mag; mag = sqrtf(a.x * a.x + a.y * a.y); result.x = a.x / mag; result.y = a.y / mag; return result; } UN_INLINE float3 un_m_normalize3f(float3 a) { float3 result; float mag; mag = sqrtf(a.x * a.x + a.y * a.y + a.z * a.z); result.x = a.x / mag; result.y = a.y / mag; result.z = a.z / mag; return result; } UN_INLINE float4 un_m_normalize4f(float4 a) { float4 result; float mag; mag = sqrtf(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w); result.x = a.x / mag; result.y = a.y / mag; result.z = a.z / mag; result.w = a.w / mag; return result; } UN_INLINE float2 un_m_project2f(float2 a, float2 onto) { float f; float2 result; f = a.x * onto.x + a.y * onto.y; f /= onto.x * onto.x + onto.y * onto.y; result.x = onto.x * f; result.y = onto.y * f; return result; } UN_INLINE float3 un_m_project3f(float3 a, float3 onto) { float f; float3 result; f = a.x * onto.x + a.y * onto.y + a.z * onto.z; f /= onto.x * onto.x + onto.y * onto.y + onto.z * onto.z; result.x = onto.x * f; result.y = onto.y * f; result.z = onto.z * f; return result; } UN_INLINE float4 un_m_project4f(float4 a, float4 onto) { float f; float4 result; f = a.x * onto.x + a.y * onto.y + a.z * onto.z + a.w * onto.w; f /= onto.x * onto.x + onto.y * onto.y + onto.z * onto.z + onto.w * onto.w; result.x = onto.x * f; result.y = onto.y * f; result.z = onto.z * f; result.w = onto.w * f; return result; } UN_INLINE float2 un_m_reflect2f(float2 a, float2 normal) { float f; float2 result; f = a.x * normal.x + a.y * normal.y; result.x = normal.x * f * 2.0f; result.y = normal.y * f * 2.0f; result.x -= a.x; result.y -= a.y; return result; } UN_INLINE float3 un_m_reflect3f(float3 a, float3 normal) { float f; float3 result; f = a.x * normal.x + a.y * normal.y + a.z * normal.z; result.x = normal.x * f * 2.0f; result.y = normal.y * f * 2.0f; result.z = normal.z * f * 2.0f; result.x -= a.x; result.y -= a.y; result.z -= a.z; return result; } UN_INLINE float4 un_m_reflect4f(float4 a, float4 normal) { float f; float4 result; f = a.x * normal.x + a.y * normal.y + a.z * normal.z + a.w * normal.w; result.x = normal.x * f * 2.0f; result.y = normal.y * f * 2.0f; result.z = normal.z * f * 2.0f; result.w = normal.w * f * 2.0f; result.x -= a.x; result.y -= a.y; result.z -= a.z; result.w -= a.w; return result; }