From 712e5aa6db15501e5df99ddb68900811bbb6020e Mon Sep 17 00:00:00 2001 From: Zak Strange Date: Tue, 30 Aug 2016 11:58:26 -0700 Subject: [PATCH] Fixed issue #33, #32, #27, #30 --- HandmadeMath.h | 54 +++++++++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index 540d512..68b09fd 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -1,5 +1,5 @@ /* - HandmadeMath.h v0.5.2 + HandmadeMath.h v0.6 This is a single header file with a bunch of useful functions for basic game math operations. @@ -122,7 +122,15 @@ 0.5.2 (*) Fixed SSE code in HMM_SqrtF (*) Fixed SSE code in HMM_RSqrtF - + 0.6 + (*) Added Unit testing + (*) Made HMM_Power faster + (*) Fixed possible efficiency problem with HMM_Normalize + (*) RENAMED HMM_LengthSquareRoot to HMM_LengthSquared + (*) RENAMED HMM_RSqrtF to HMM_RSquareRootF + (*) RENAMED HMM_SqrtF to HMM_SquareRootF + (*) REMOVED Inner function (user should use Dot now) + (*) REMOVED HMM_FastInverseSquareRoot function declaration LICENSE @@ -147,10 +155,6 @@ Insofaras (@insofaras) */ -// NOTE(zak): I think this is the include for SSE 2 on -// MacOS, Windows, and Linux if im wrong just open up -// a issue and tell me, or submit a pull request -// with the fix. #include #ifndef HANDMADE_MATH_H @@ -334,12 +338,11 @@ typedef hmm_mat4 hmm_m4; HMMDEF float HMM_SinF(float Angle); HMMDEF float HMM_TanF(float Angle); HMMDEF float HMM_CosF(float Angle); -HMMDEF float HMM_SqrtF(float Angle); HMMDEF float HMM_ToRadians(float Degrees); -HMMDEF float HMM_Inner(hmm_vec3 A, hmm_vec3 B); -HMMDEF float HMM_SquareRoot(float Float); -HMMDEF float HMM_LengthSquareRoot(hmm_vec3 A); +HMMDEF float HMM_SquareRootF(float Float); +HMMDEF float HMM_RSquareRootF(float Float); +HMMDEF float HMM_LengthSquared(hmm_vec3 A); HMMDEF float HMM_FastInverseSquareRoot(float Number); HMMDEF float HMM_Length(hmm_vec3 A); HMMDEF float HMM_Power(float Base, int Exponent); @@ -528,7 +531,7 @@ HMM_TanF(float Radians) } HINLINE float -HMM_SqrtF(float Value) +HMM_SquareRootF(float Value) { float Result = 0; @@ -544,7 +547,7 @@ HMM_SqrtF(float Value) } HINLINE float -HMM_RSqrtF(float Value) +HMM_RSquareRootF(float Value) { float Result = 0; @@ -569,20 +572,20 @@ HMM_ToRadians(float Degrees) } HINLINE float -HMM_Inner(hmm_vec3 A, hmm_vec3 B) +HMM_Dot(hmm_vec3 VecOne, hmm_vec3 VecTwo) { float Result = 0; - Result = A.X * B.X + A.Y * B.Y + A.Z * B.Z; + Result = (VecOne.X * VecTwo.X) + (VecOne.Y * VecTwo.Y) + (VecOne.Z * VecTwo.Z); return (Result); } HINLINE float -HMM_LengthSquareRoot(hmm_vec3 A) +HMM_LengthSquared(hmm_vec3 A) { float Result = 0; - Result = HMM_Inner(A, A); + Result = HMM_Dot(A, A); return (Result); } @@ -591,7 +594,7 @@ HMM_Length(hmm_vec3 A) { float Result = 0; - Result = HMM_SqrtF(HMM_LengthSquareRoot(A)); + Result = HMM_SquareRootF(HMM_LengthSquared(A)); return (Result); } @@ -646,9 +649,11 @@ HMM_Normalize(hmm_vec3 A) { hmm_vec3 Result = {0}; - Result.X = A.X * (1.0f / HMM_Length(A)); - Result.Y = A.Y * (1.0f / HMM_Length(A)); - Result.Z = A.Z * (1.0f / HMM_Length(A)); + float VectorLength = HMM_Length(A); + + Result.X = A.X * (1.0f / VectorLength); + Result.Y = A.Y * (1.0f / VectorLength); + Result.Z = A.Z * (1.0f / VectorLength); return (Result); } @@ -665,15 +670,6 @@ HMM_Cross(hmm_vec3 VecOne, hmm_vec3 VecTwo) return (Result); } -HINLINE float -HMM_Dot(hmm_vec3 VecOne, hmm_vec3 VecTwo) -{ - float Result = 0; - - Result = (VecOne.X * VecTwo.X) + (VecOne.Y * VecTwo.Y) + (VecOne.Z * VecTwo.Z); - return (Result); -} - HINLINE hmm_vec2 HMM_Vec2(float X, float Y) {