After far too long, we are happy to release Handmade Math 2.0. Handmade Math 2.0 introduces the following new features and changes:
-
A concise naming scheme. Handmade Math 1.0 has extremely verbose names. For version 2, we've reworked them to use a terse naming scheme that will make expressions much more readable. Here are some examples:
HMM_MultiplyMat4ByVec4
->HMM_MulM4V4
HMM_MultiplyVec3f
->HMM_MulV3F
HMM_EqualsVec4
->HMM_EqV4
This is obviously an extremely breaking change, but to ease the transition, we provide a tool to automatically rename Handmade Math functions and types in your codebase. See the
update
folder of the repo. -
Matrix inverses. We are happy to finally provide our most long-requested feature. We now have a variety of functions for matrix inverses.
-
2x2 and 3x3 matrices. We now provide types
HMM_Mat2
andHMM_Mat3
. -
C11 generics. C programmers can now use "overloaded" functions like
HMM_Add
instead ofHMM_AddV2
,HMM_AddV3
, etc. Your expressions can now be a little more readable! -
Consistent (and configurable) angle units. Handmade Math 1.0 used radians for some operations and degrees for others. Handmade Math 2.0 makes all functions use the same angle units - but also makes those units configurable, so you can choose to use radians, degrees, or turns across your codebase. See the documentation in
HandmadeMath.h
. -
Left-handed and right-handed operations. Handmade Math 2.0 has both left-handed and right-handed versions of all operations where handedness applies.
This release would not be possible without the help of @dev-dwarf. Many thanks for his contributions!
Other breaking changes:
- If you use Handmade Math without the standard library, the way you provide custom math functions has changed. You must now
#define HANDMADE_MATH_PROVIDE_MATH_FUNCTIONS
in addition to#define HMM_SINF
etc. HMM_ExpF
,HMM_LogF
,HMM_Power
, andHMM_PowerF
have been removed. They were not used internally and provided no benefit.HMM_PREFIX
has been removed. If you wish to use a different prefix, find and replace withinHandmadeMath.h
.- Semi-breaking:
HMM_InvSqrtF
(formerlyHMM_RSquareRootF
) no longer does a fast inverse square root under any circumstances. It now always does a full-precision square root. This is to ensure consistent results on all platforms.