More revising of the API from The Bar
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
#define DN_MATH_CPP
|
||||
|
||||
#if !defined(DN_NO_V2)
|
||||
// NOTE: DN_V2 /////////////////////////////////////////////////////////////////////////////////////
|
||||
// NOTE: DN_V2I32
|
||||
#include "dn_math.h"
|
||||
|
||||
DN_API bool operator==(DN_V2I32 lhs, DN_V2I32 rhs)
|
||||
{
|
||||
bool result = (lhs.x == rhs.x) && (lhs.y == rhs.y);
|
||||
@@ -159,7 +158,6 @@ DN_API DN_V2I32 DN_V2I32_Abs(DN_V2I32 a)
|
||||
return result;
|
||||
}
|
||||
|
||||
// NOTE: DN_V2U16
|
||||
DN_API bool operator!=(DN_V2U16 lhs, DN_V2U16 rhs)
|
||||
{
|
||||
bool result = !(lhs == rhs);
|
||||
@@ -292,7 +290,6 @@ DN_API DN_V2U16 &operator+=(DN_V2U16 &lhs, DN_V2U16 rhs)
|
||||
return lhs;
|
||||
}
|
||||
|
||||
// NOTE: DN_V2
|
||||
DN_API bool operator!=(DN_V2F32 lhs, DN_V2F32 rhs)
|
||||
{
|
||||
bool result = !(lhs == rhs);
|
||||
@@ -329,7 +326,6 @@ DN_API bool operator>(DN_V2F32 lhs, DN_V2F32 rhs)
|
||||
return result;
|
||||
}
|
||||
|
||||
// NOTE: DN_V2F32 operator- //////////////////////////////////////////////////////////////////////////
|
||||
DN_API DN_V2F32 operator-(DN_V2F32 lhs)
|
||||
{
|
||||
DN_V2F32 result = DN_V2F32_From2N(-lhs.x, -lhs.y);
|
||||
@@ -360,7 +356,6 @@ DN_API DN_V2F32 operator-(DN_V2F32 lhs, int32_t rhs)
|
||||
return result;
|
||||
}
|
||||
|
||||
// NOTE: DN_V2F32 operator+ //////////////////////////////////////////////////////////////////////////
|
||||
DN_API DN_V2F32 operator+(DN_V2F32 lhs, DN_V2F32 rhs)
|
||||
{
|
||||
DN_V2F32 result = DN_V2F32_From2N(lhs.x + rhs.x, lhs.y + rhs.y);
|
||||
@@ -385,7 +380,6 @@ DN_API DN_V2F32 operator+(DN_V2F32 lhs, int32_t rhs)
|
||||
return result;
|
||||
}
|
||||
|
||||
// NOTE: DN_V2F32 operator* //////////////////////////////////////////////////////////////////////////
|
||||
DN_API DN_V2F32 operator*(DN_V2F32 lhs, DN_V2F32 rhs)
|
||||
{
|
||||
DN_V2F32 result = DN_V2F32_From2N(lhs.x * rhs.x, lhs.y * rhs.y);
|
||||
@@ -410,7 +404,6 @@ DN_API DN_V2F32 operator*(DN_V2F32 lhs, int32_t rhs)
|
||||
return result;
|
||||
}
|
||||
|
||||
// NOTE: DN_V2F32 operator/ //////////////////////////////////////////////////////////////////////////
|
||||
DN_API DN_V2F32 operator/(DN_V2F32 lhs, DN_V2F32 rhs)
|
||||
{
|
||||
DN_V2F32 result = DN_V2F32_From2N(lhs.x / rhs.x, lhs.y / rhs.y);
|
||||
@@ -435,7 +428,6 @@ DN_API DN_V2F32 operator/(DN_V2F32 lhs, int32_t rhs)
|
||||
return result;
|
||||
}
|
||||
|
||||
// NOTE: DN_V2F32 operator*/ /////////////////////////////////////////////////////////////////////////
|
||||
DN_API DN_V2F32 &operator*=(DN_V2F32 &lhs, DN_V2F32 rhs)
|
||||
{
|
||||
lhs = lhs * rhs;
|
||||
@@ -460,7 +452,6 @@ DN_API DN_V2F32 &operator*=(DN_V2F32 &lhs, int32_t rhs)
|
||||
return lhs;
|
||||
}
|
||||
|
||||
// NOTE: DN_V2F32 operator// /////////////////////////////////////////////////////////////////////////
|
||||
DN_API DN_V2F32 &operator/=(DN_V2F32 &lhs, DN_V2F32 rhs)
|
||||
{
|
||||
lhs = lhs / rhs;
|
||||
@@ -485,7 +476,6 @@ DN_API DN_V2F32 &operator/=(DN_V2F32 &lhs, int32_t rhs)
|
||||
return lhs;
|
||||
}
|
||||
|
||||
// NOTE: DN_V2F32 operator-/ /////////////////////////////////////////////////////////////////////////
|
||||
DN_API DN_V2F32 &operator-=(DN_V2F32 &lhs, DN_V2F32 rhs)
|
||||
{
|
||||
lhs = lhs - rhs;
|
||||
@@ -510,7 +500,6 @@ DN_API DN_V2F32 &operator-=(DN_V2F32 &lhs, int32_t rhs)
|
||||
return lhs;
|
||||
}
|
||||
|
||||
// NOTE: DN_V2F32 operator+/ /////////////////////////////////////////////////////////////////////////
|
||||
DN_API DN_V2F32 &operator+=(DN_V2F32 &lhs, DN_V2F32 rhs)
|
||||
{
|
||||
lhs = lhs + rhs;
|
||||
@@ -682,10 +671,7 @@ DN_API DN_F32 DN_V2F32_Area(DN_V2F32 a)
|
||||
DN_F32 result = a.w * a.h;
|
||||
return result;
|
||||
}
|
||||
#endif // !defined(DN_NO_V2)
|
||||
|
||||
#if !defined(DN_NO_V3)
|
||||
// NOTE: DN_V3 /////////////////////////////////////////////////////////////////////////////////////
|
||||
DN_API bool operator!=(DN_V3F32 lhs, DN_V3F32 rhs)
|
||||
{
|
||||
bool result = !(lhs == rhs);
|
||||
@@ -843,10 +829,7 @@ DN_API DN_V3F32 DN_V3_Normalise(DN_V3F32 a)
|
||||
DN_V3F32 result = a / length;
|
||||
return result;
|
||||
}
|
||||
#endif // !defined(DN_NO_V3)
|
||||
|
||||
#if !defined(DN_NO_V4)
|
||||
// NOTE: DN_V4 /////////////////////////////////////////////////////////////////////////////////////
|
||||
DN_API DN_V4F32 DN_V4F32_FromRGBU32(DN_U32 u32)
|
||||
{
|
||||
DN_U8 r = (DN_U8)(((u32 << 8) & DN_V4_R_MASK_U32) >> 24);
|
||||
@@ -979,10 +962,7 @@ DN_API DN_F32 DN_V4F32Dot(DN_V4F32 a, DN_V4F32 b)
|
||||
DN_F32 result = (a.x * b.x) + (a.y * b.y) + (a.z * b.z) + (a.w * b.w);
|
||||
return result;
|
||||
}
|
||||
#endif // !defined(DN_NO_V4)
|
||||
|
||||
#if !defined(DN_NO_M4)
|
||||
// NOTE: DN_M4 /////////////////////////////////////////////////////////////////////////////////////
|
||||
DN_API DN_M4 DN_M4_Identity()
|
||||
{
|
||||
DN_M4 result =
|
||||
@@ -1231,9 +1211,7 @@ DN_API DN_Str8x256 DN_M4_ColumnMajorString(DN_M4 mat)
|
||||
|
||||
return result;
|
||||
}
|
||||
#endif // !defined(DN_M4)
|
||||
|
||||
// NOTE: DN_M2x3 ///////////////////////////////////////////////////////////////////////////////////
|
||||
DN_API bool operator==(DN_M2x3 const &lhs, DN_M2x3 const &rhs)
|
||||
{
|
||||
bool result = DN_Memcmp(lhs.e, rhs.e, sizeof(lhs.e[0]) * DN_ArrayCountU(lhs.e)) == 0;
|
||||
@@ -1355,8 +1333,6 @@ DN_API DN_V2F32 DN_M2x3_MulV2(DN_M2x3 m1, DN_V2F32 v2)
|
||||
return result;
|
||||
}
|
||||
|
||||
#if !defined(DN_NO_RECT)
|
||||
// NOTE: DN_Rect ///////////////////////////////////////////////////////////////////////////////////
|
||||
DN_API bool operator==(const DN_Rect &lhs, const DN_Rect &rhs)
|
||||
{
|
||||
bool result = (lhs.pos == rhs.pos) && (lhs.size == rhs.size);
|
||||
@@ -1561,9 +1537,6 @@ DN_API DN_V2F32 DN_Rect_BottomRight(DN_Rect rect)
|
||||
DN_V2F32 result = DN_Rect_InterpolatedPoint(rect, DN_V2F32_From2N(1, 1));
|
||||
return result;
|
||||
}
|
||||
#endif // !defined(DN_NO_RECT)
|
||||
|
||||
// NOTE: Raycast ///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
DN_API DN_RaycastLineIntersectV2Result DN_Raycast_LineIntersectV2(DN_V2F32 origin_a, DN_V2F32 dir_a, DN_V2F32 origin_b, DN_V2F32 dir_b)
|
||||
{
|
||||
@@ -1596,7 +1569,6 @@ DN_API DN_RaycastLineIntersectV2Result DN_Raycast_LineIntersectV2(DN_V2F32 origi
|
||||
return result;
|
||||
}
|
||||
|
||||
// NOTE: Other /////////////////////////////////////////////////////////////////////////////////////
|
||||
DN_API DN_V2F32 DN_Lerp_V2F32(DN_V2F32 a, DN_F32 t, DN_V2F32 b)
|
||||
{
|
||||
DN_V2F32 result = {};
|
||||
|
||||
+50
-73
@@ -1,22 +1,29 @@
|
||||
#if !defined(DN_MATH_H)
|
||||
#define DN_MATH_H
|
||||
|
||||
#include "../dn_base_inc.h"
|
||||
|
||||
DN_MSVC_WARNING_PUSH
|
||||
DN_MSVC_WARNING_DISABLE(4201) // warning C4201: nonstandard extension used: nameless struct/union
|
||||
#if !defined(DN_NO_V2)
|
||||
// NOTE: DN_V2 /////////////////////////////////////////////////////////////////////////////////////
|
||||
union DN_V2I32
|
||||
{
|
||||
struct { int32_t x, y; };
|
||||
struct { int32_t w, h; };
|
||||
int32_t data[2];
|
||||
struct { DN_I32 x, y; };
|
||||
struct { DN_I32 w, h; };
|
||||
DN_I32 data[2];
|
||||
};
|
||||
|
||||
union DN_V2U16
|
||||
{
|
||||
struct { uint16_t x, y; };
|
||||
struct { uint16_t w, h; };
|
||||
uint16_t data[2];
|
||||
struct { DN_U16 x, y; };
|
||||
struct { DN_U16 w, h; };
|
||||
DN_U16 data[2];
|
||||
};
|
||||
|
||||
union DN_V2U32
|
||||
{
|
||||
struct { DN_U32 x, y; };
|
||||
struct { DN_U32 w, h; };
|
||||
DN_U32 data[2];
|
||||
};
|
||||
|
||||
union DN_V2F32
|
||||
@@ -25,10 +32,7 @@ union DN_V2F32
|
||||
struct { DN_F32 w, h; };
|
||||
DN_F32 data[2];
|
||||
};
|
||||
#endif // !defined(DN_NO_V2)
|
||||
|
||||
#if !defined(DN_NO_V3)
|
||||
// NOTE: DN_V3 /////////////////////////////////////////////////////////////////////////////////////
|
||||
union DN_V3F32
|
||||
{
|
||||
struct { DN_F32 x, y, z; };
|
||||
@@ -36,10 +40,7 @@ union DN_V3F32
|
||||
DN_F32 data[3];
|
||||
};
|
||||
|
||||
#endif // !defined(DN_NO_V3)
|
||||
|
||||
#if !defined(DN_NO_V4)
|
||||
// NOTE: DN_V4 /////////////////////////////////////////////////////////////////////////////////////
|
||||
union DN_V4F32
|
||||
{
|
||||
struct { DN_F32 x, y, z, w; };
|
||||
@@ -50,29 +51,19 @@ union DN_V4F32
|
||||
#endif
|
||||
DN_F32 data[4];
|
||||
};
|
||||
#endif // !defined(DN_NO_V4)
|
||||
DN_MSVC_WARNING_POP
|
||||
|
||||
#if !defined(DN_NO_M4)
|
||||
// NOTE: DN_M4 /////////////////////////////////////////////////////////////////////////////////////
|
||||
struct DN_M4
|
||||
{
|
||||
DN_F32 columns[4][4]; // Column major matrix
|
||||
};
|
||||
#endif // !defined(DN_M4)
|
||||
|
||||
// NOTE: DN_M2x3 ///////////////////////////////////////////////////////////////////////////////////
|
||||
union DN_M2x3
|
||||
{
|
||||
DN_F32 e[6];
|
||||
DN_F32 row[2][3];
|
||||
};
|
||||
|
||||
// NOTE: DN_Rect ///////////////////////////////////////////////////////////////////////////////////
|
||||
#if !defined(DN_NO_RECT)
|
||||
#if defined(DN_NO_V2)
|
||||
#error "Rectangles requires V2, DN_NO_V2 must not be defined"
|
||||
#endif
|
||||
struct DN_Rect
|
||||
{
|
||||
DN_V2F32 pos, size;
|
||||
@@ -102,10 +93,7 @@ struct DN_RectCut
|
||||
DN_Rect* rect;
|
||||
DN_RectCutSide side;
|
||||
};
|
||||
#endif // !defined(DN_NO_RECT)
|
||||
|
||||
// NOTE: Other /////////////////////////////////////////////////////////////////////////////////////
|
||||
// NOTE: API
|
||||
struct DN_RaycastLineIntersectV2Result
|
||||
{
|
||||
bool hit; // True if there was an intersection, false if the lines are parallel
|
||||
@@ -113,13 +101,11 @@ struct DN_RaycastLineIntersectV2Result
|
||||
DN_F32 t_b; // Distance along `dir_b` that the intersection occurred, e.g. `origin_b + (dir_b * t_b)`
|
||||
};
|
||||
|
||||
#if !defined(DN_NO_V2)
|
||||
// NOTE: DN_V2 /////////////////////////////////////////////////////////////////////////////////////
|
||||
#define DN_V2I32_Zero DN_LITERAL(DN_V2I32){{(int32_t)(0), (int32_t)(0)}}
|
||||
#define DN_V2I32_One DN_LITERAL(DN_V2I32){{(int32_t)(1), (int32_t)(1)}}
|
||||
#define DN_V2I32_From1N(x) DN_LITERAL(DN_V2I32){{(int32_t)(x), (int32_t)(x)}}
|
||||
#define DN_V2I32_From2N(x, y) DN_LITERAL(DN_V2I32){{(int32_t)(x), (int32_t)(y)}}
|
||||
#define DN_V2I32_InitV2(xy) DN_LITERAL(DN_V2I32){{(int32_t)(xy).x, (int32_t)(xy).y}}
|
||||
#define DN_V2I32_Zero DN_Literal(DN_V2I32){{(int32_t)(0), (int32_t)(0)}}
|
||||
#define DN_V2I32_One DN_Literal(DN_V2I32){{(int32_t)(1), (int32_t)(1)}}
|
||||
#define DN_V2I32_From1N(x) DN_Literal(DN_V2I32){{(int32_t)(x), (int32_t)(x)}}
|
||||
#define DN_V2I32_From2N(x, y) DN_Literal(DN_V2I32){{(int32_t)(x), (int32_t)(y)}}
|
||||
#define DN_V2I32_InitV2(xy) DN_Literal(DN_V2I32){{(int32_t)(xy).x, (int32_t)(xy).y}}
|
||||
|
||||
DN_API bool operator!= (DN_V2I32 lhs, DN_V2I32 rhs);
|
||||
DN_API bool operator== (DN_V2I32 lhs, DN_V2I32 rhs);
|
||||
@@ -149,10 +135,10 @@ DN_API DN_V2I32 DN_V2I32_Min (DN_V2I32 a, DN
|
||||
DN_API DN_V2I32 DN_V2I32_Max (DN_V2I32 a, DN_V2I32 b);
|
||||
DN_API DN_V2I32 DN_V2I32_Abs (DN_V2I32 a);
|
||||
|
||||
#define DN_V2U16_Zero DN_LITERAL(DN_V2U16){{(uint16_t)(0), (uint16_t)(0)}}
|
||||
#define DN_V2U16_One DN_LITERAL(DN_V2U16){{(uint16_t)(1), (uint16_t)(1)}}
|
||||
#define DN_V2U16_From1N(x) DN_LITERAL(DN_V2U16){{(uint16_t)(x), (uint16_t)(x)}}
|
||||
#define DN_V2U16_From2N(x, y) DN_LITERAL(DN_V2U16){{(uint16_t)(x), (uint16_t)(y)}}
|
||||
#define DN_V2U16_Zero DN_Literal(DN_V2U16){{(uint16_t)(0), (uint16_t)(0)}}
|
||||
#define DN_V2U16_One DN_Literal(DN_V2U16){{(uint16_t)(1), (uint16_t)(1)}}
|
||||
#define DN_V2U16_From1N(x) DN_Literal(DN_V2U16){{(uint16_t)(x), (uint16_t)(x)}}
|
||||
#define DN_V2U16_From2N(x, y) DN_Literal(DN_V2U16){{(uint16_t)(x), (uint16_t)(y)}}
|
||||
|
||||
DN_API bool operator!= (DN_V2U16 lhs, DN_V2U16 rhs);
|
||||
DN_API bool operator== (DN_V2U16 lhs, DN_V2U16 rhs);
|
||||
@@ -177,11 +163,11 @@ DN_API DN_V2U16 & operator/= (DN_V2U16& lhs,
|
||||
DN_API DN_V2U16 & operator-= (DN_V2U16& lhs, DN_V2U16 rhs);
|
||||
DN_API DN_V2U16 & operator+= (DN_V2U16& lhs, DN_V2U16 rhs);
|
||||
|
||||
#define DN_V2F32_Zero DN_LITERAL(DN_V2F32){{(DN_F32)(0), (DN_F32)(0)}}
|
||||
#define DN_V2F32_One DN_LITERAL(DN_V2F32){{(DN_F32)(1), (DN_F32)(1)}}
|
||||
#define DN_V2F32_From1N(x) DN_LITERAL(DN_V2F32){{(DN_F32)(x), (DN_F32)(x)}}
|
||||
#define DN_V2F32_From2N(x, y) DN_LITERAL(DN_V2F32){{(DN_F32)(x), (DN_F32)(y)}}
|
||||
#define DN_V2F32_FromV2I32(xy) DN_LITERAL(DN_V2F32){{(DN_F32)(xy).x, (DN_F32)(xy).y}}
|
||||
#define DN_V2F32_Zero DN_Literal(DN_V2F32){{(DN_F32)(0), (DN_F32)(0)}}
|
||||
#define DN_V2F32_One DN_Literal(DN_V2F32){{(DN_F32)(1), (DN_F32)(1)}}
|
||||
#define DN_V2F32_From1N(x) DN_Literal(DN_V2F32){{(DN_F32)(x), (DN_F32)(x)}}
|
||||
#define DN_V2F32_From2N(x, y) DN_Literal(DN_V2F32){{(DN_F32)(x), (DN_F32)(y)}}
|
||||
#define DN_V2F32_FromV2I32(xy) DN_Literal(DN_V2F32){{(DN_F32)(xy).x, (DN_F32)(xy).y}}
|
||||
|
||||
DN_API bool operator!= (DN_V2F32 lhs, DN_V2F32 rhs);
|
||||
DN_API bool operator== (DN_V2F32 lhs, DN_V2F32 rhs);
|
||||
@@ -244,12 +230,10 @@ DN_API DN_V2F32 DN_V2F32_Normalise (DN_V2F32 a);
|
||||
DN_API DN_V2F32 DN_V2F32_Perpendicular (DN_V2F32 a);
|
||||
DN_API DN_V2F32 DN_V2F32_Reflect (DN_V2F32 in, DN_V2F32 surface);
|
||||
DN_API DN_F32 DN_V2F32_Area (DN_V2F32 a);
|
||||
#endif // !defined(DN_NO_V2)
|
||||
#if !defined(DN_NO_V3)
|
||||
// NOTE: DN_V3 /////////////////////////////////////////////////////////////////////////////////////
|
||||
#define DN_V3F32_From1N(x) DN_LITERAL(DN_V3F32){{(DN_F32)(x), (DN_F32)(x), (DN_F32)(x)}}
|
||||
#define DN_V3F32_From3N(x, y, z) DN_LITERAL(DN_V3F32){{(DN_F32)(x), (DN_F32)(y), (DN_F32)(z)}}
|
||||
#define DN_V3F32_FromV2F32And1N(xy, z) DN_LITERAL(DN_V3F32){{(DN_F32)(xy.x), (DN_F32)(xy.y), (DN_F32)(z)}}
|
||||
|
||||
#define DN_V3F32_From1N(x) DN_Literal(DN_V3F32){{(DN_F32)(x), (DN_F32)(x), (DN_F32)(x)}}
|
||||
#define DN_V3F32_From3N(x, y, z) DN_Literal(DN_V3F32){{(DN_F32)(x), (DN_F32)(y), (DN_F32)(z)}}
|
||||
#define DN_V3F32_FromV2F32And1N(xy, z) DN_Literal(DN_V3F32){{(DN_F32)(xy.x), (DN_F32)(xy.y), (DN_F32)(z)}}
|
||||
|
||||
DN_API bool operator== (DN_V3F32 lhs, DN_V3F32 rhs);
|
||||
DN_API bool operator!= (DN_V3F32 lhs, DN_V3F32 rhs);
|
||||
@@ -277,19 +261,17 @@ DN_API DN_V3F32 & operator+= (DN_V3F32 &lhs,
|
||||
DN_API DN_F32 DN_V3F32_LengthSq (DN_V3F32 a);
|
||||
DN_API DN_F32 DN_V3F32_Length (DN_V3F32 a);
|
||||
DN_API DN_V3F32 DN_V3F32_Normalise (DN_V3F32 a);
|
||||
#endif // !defined(DN_NO_V3)
|
||||
#if !defined(DN_NO_V4)
|
||||
|
||||
DN_U32 const DN_V4_R_MASK_U32 = 0xFF000000;
|
||||
DN_U32 const DN_V4_G_MASK_U32 = 0x00FF0000;
|
||||
DN_U32 const DN_V4_B_MASK_U32 = 0x0000FF00;
|
||||
DN_U32 const DN_V4_A_MASK_U32 = 0x000000FF;
|
||||
|
||||
// NOTE: DN_V4 /////////////////////////////////////////////////////////////////////////////////////
|
||||
#define DN_V4F32_From1N(x) DN_LITERAL(DN_V4F32){{(DN_F32)(x), (DN_F32)(x), (DN_F32)(x), (DN_F32)(x)}}
|
||||
#define DN_V4F32_From4N(x, y, z, w) DN_LITERAL(DN_V4F32){{(DN_F32)(x), (DN_F32)(y), (DN_F32)(z), (DN_F32)(w)}}
|
||||
#define DN_V4F32_FromV3And1N(xyz, w) DN_LITERAL(DN_V4F32){{xyz.x, xyz.y, xyz.z, w}}
|
||||
#define DN_V4F32_FromRGBAU8(r, g, b, a) DN_LITERAL(DN_V4F32){{r / 255.f, g / 255.f, b / 255.f, a / 255.f}}
|
||||
#define DN_V4F32_FromRGBU8(r, g, b) DN_LITERAL(DN_V4F32){{r / 255.f, g / 255.f, b / 255.f, 1.f}}
|
||||
#define DN_V4F32_From1N(x) DN_Literal(DN_V4F32){{(DN_F32)(x), (DN_F32)(x), (DN_F32)(x), (DN_F32)(x)}}
|
||||
#define DN_V4F32_From4N(x, y, z, w) DN_Literal(DN_V4F32){{(DN_F32)(x), (DN_F32)(y), (DN_F32)(z), (DN_F32)(w)}}
|
||||
#define DN_V4F32_FromV3And1N(xyz, w) DN_Literal(DN_V4F32){{xyz.x, xyz.y, xyz.z, w}}
|
||||
#define DN_V4F32_FromRGBAU8(r, g, b, a) DN_Literal(DN_V4F32){{r / 255.f, g / 255.f, b / 255.f, a / 255.f}}
|
||||
#define DN_V4F32_FromRGBU8(r, g, b) DN_Literal(DN_V4F32){{r / 255.f, g / 255.f, b / 255.f, 1.f}}
|
||||
DN_API DN_V4F32 DN_V4F32_FromRGBU32(DN_U32 u32);
|
||||
DN_API DN_V4F32 DN_V4F32_FromRGBAU32(DN_U32 u32);
|
||||
#define DN_V4F32_FromV4Alpha(v4, alpha) DN_V4F32_FromV3And1N(v4.xyz, alpha)
|
||||
@@ -311,9 +293,7 @@ DN_API DN_V4F32 & operator*= (DN_V4F32 &lhs,
|
||||
DN_API DN_V4F32 & operator-= (DN_V4F32 &lhs, DN_V4F32 rhs);
|
||||
DN_API DN_V4F32 & operator+= (DN_V4F32 &lhs, DN_V4F32 rhs);
|
||||
DN_API DN_F32 DN_V4F32_Dot (DN_V4F32 a, DN_V4F32 b);
|
||||
#endif // !defined(DN_NO_V4)
|
||||
#if !defined(DN_NO_M4)
|
||||
// NOTE: DN_M4 /////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
DN_API DN_M4 DN_M4_Identity ();
|
||||
DN_API DN_M4 DN_M4_ScaleF (DN_F32 x, DN_F32 y, DN_F32 z);
|
||||
DN_API DN_M4 DN_M4_Scale (DN_V3F32 xyz);
|
||||
@@ -332,8 +312,7 @@ DN_API DN_M4 DN_M4_SubF (DN_M4 lhs, DN_
|
||||
DN_API DN_M4 DN_M4_MulF (DN_M4 lhs, DN_F32 rhs);
|
||||
DN_API DN_M4 DN_M4_DivF (DN_M4 lhs, DN_F32 rhs);
|
||||
DN_API DN_Str8x256 DN_M4_ColumnMajorString (DN_M4 mat);
|
||||
#endif // !defined(DN_NO_M4)
|
||||
// NOTE: DN_M2x3 ///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
DN_API bool operator== (DN_M2x3 const &lhs, DN_M2x3 const &rhs);
|
||||
DN_API bool operator!= (DN_M2x3 const &lhs, DN_M2x3 const &rhs);
|
||||
DN_API DN_M2x3 DN_M2x3_Identity ();
|
||||
@@ -343,10 +322,9 @@ DN_API DN_M2x3 DN_M2x3_Rotate (DN_F32 radians
|
||||
DN_API DN_M2x3 DN_M2x3_Mul (DN_M2x3 m1, DN_M2x3 m2);
|
||||
DN_API DN_V2F32 DN_M2x3_Mul2F32 (DN_M2x3 m1, DN_F32 x, DN_F32 y);
|
||||
DN_API DN_V2F32 DN_M2x3_MulV2 (DN_M2x3 m1, DN_V2F32 v2);
|
||||
#if !defined(DN_NO_RECT)
|
||||
// NOTE: DN_Rect ///////////////////////////////////////////////////////////////////////////////////
|
||||
#define DN_Rect_From2V2(pos, size) DN_LITERAL(DN_Rect){(pos), (size)}
|
||||
#define DN_Rect_From4N(x, y, w, h) DN_LITERAL(DN_Rect){DN_LITERAL(DN_V2F32){{x, y}}, DN_LITERAL(DN_V2F32){{w, h}}}
|
||||
|
||||
#define DN_Rect_From2V2(pos, size) DN_Literal(DN_Rect){(pos), (size)}
|
||||
#define DN_Rect_From4N(x, y, w, h) DN_Literal(DN_Rect){DN_Literal(DN_V2F32){{x, y}}, DN_Literal(DN_V2F32){{w, h}}}
|
||||
|
||||
DN_API bool operator== (const DN_Rect& lhs, const DN_Rect& rhs);
|
||||
DN_API DN_V2F32 DN_Rect_Center (DN_Rect rect);
|
||||
@@ -381,13 +359,12 @@ DN_API DN_Rect DN_Rect_CutBottomClip (DN_Rect *rect,
|
||||
#define DN_Rect_CutBottomNoClip(rect, amount) DN_Rect_CutBottomClip(rect, amount, DN_RectCutClip_No)
|
||||
|
||||
DN_API DN_Rect DN_RectCut_Cut (DN_RectCut rect_cut, DN_V2F32 size, DN_RectCutClip clip);
|
||||
#define DN_RectCut_Init(rect, side) DN_LITERAL(DN_RectCut){rect, side}
|
||||
#define DN_RectCut_Left(rect) DN_LITERAL(DN_RectCut){rect, DN_RectCutSide_Left}
|
||||
#define DN_RectCut_Right(rect) DN_LITERAL(DN_RectCut){rect, DN_RectCutSide_Right}
|
||||
#define DN_RectCut_Top(rect) DN_LITERAL(DN_RectCut){rect, DN_RectCutSide_Top}
|
||||
#define DN_RectCut_Bottom(rect) DN_LITERAL(DN_RectCut){rect, DN_RectCutSide_Bottom}
|
||||
#endif // !defined(DN_NO_RECT)
|
||||
// NOTE: Other /////////////////////////////////////////////////////////////////////////////////////
|
||||
#define DN_RectCut_Init(rect, side) DN_Literal(DN_RectCut){rect, side}
|
||||
#define DN_RectCut_Left(rect) DN_Literal(DN_RectCut){rect, DN_RectCutSide_Left}
|
||||
#define DN_RectCut_Right(rect) DN_Literal(DN_RectCut){rect, DN_RectCutSide_Right}
|
||||
#define DN_RectCut_Top(rect) DN_Literal(DN_RectCut){rect, DN_RectCutSide_Top}
|
||||
#define DN_RectCut_Bottom(rect) DN_Literal(DN_RectCut){rect, DN_RectCutSide_Bottom}
|
||||
|
||||
DN_API DN_RaycastLineIntersectV2Result DN_Raycast_LineIntersectV2(DN_V2F32 origin_a, DN_V2F32 dir_a, DN_V2F32 origin_b, DN_V2F32 dir_b);
|
||||
DN_API DN_V2F32 DN_Lerp_V2F32 (DN_V2F32 a, DN_F32 t, DN_V2F32 b);
|
||||
DN_API DN_F32 DN_Lerp_F32 (DN_F32 a, DN_F32 t, DN_F32 b);
|
||||
|
||||
+14
-14
@@ -1814,7 +1814,7 @@ static DN_UTCore DN_Tests_OS()
|
||||
DN_OSTLSTMem tmem = DN_OS_TLSTMem(nullptr);
|
||||
DN_Str8 os_result = DN_OS_EXEDir(tmem.arena);
|
||||
DN_UT_Assert(&result, DN_Str8_HasData(os_result));
|
||||
DN_UT_AssertF(&result, DN_OS_DirExists(os_result), "result(%zu): %.*s", os_result.size, DN_STR_FMT(os_result));
|
||||
DN_UT_AssertF(&result, DN_OS_PathIsDir(os_result), "result(%zu): %.*s", os_result.size, DN_STR_FMT(os_result));
|
||||
}
|
||||
|
||||
for (DN_UT_Test(&result, "DN_OS_PerfCounterNow")) {
|
||||
@@ -1844,11 +1844,11 @@ static DN_UTCore DN_Tests_OS()
|
||||
DN_UT_LogF(&result, "\nDN_OS Filesystem\n");
|
||||
{
|
||||
for (DN_UT_Test(&result, "Make directory recursive \"abcd/efgh\"")) {
|
||||
DN_UT_AssertF(&result, DN_OS_MakeDir(DN_STR8("abcd/efgh")), "Failed to make directory");
|
||||
DN_UT_AssertF(&result, DN_OS_DirExists(DN_STR8("abcd")), "Directory was not made");
|
||||
DN_UT_AssertF(&result, DN_OS_DirExists(DN_STR8("abcd/efgh")), "Subdirectory was not made");
|
||||
DN_UT_AssertF(&result, DN_OS_FileExists(DN_STR8("abcd")) == false, "This function should only return true for files");
|
||||
DN_UT_AssertF(&result, DN_OS_FileExists(DN_STR8("abcd/efgh")) == false, "This function should only return true for files");
|
||||
DN_UT_AssertF(&result, DN_OS_PathMakeDir(DN_STR8("abcd/efgh")), "Failed to make directory");
|
||||
DN_UT_AssertF(&result, DN_OS_PathIsDir(DN_STR8("abcd")), "Directory was not made");
|
||||
DN_UT_AssertF(&result, DN_OS_PathIsDir(DN_STR8("abcd/efgh")), "Subdirectory was not made");
|
||||
DN_UT_AssertF(&result, DN_OS_PathIsFile(DN_STR8("abcd")) == false, "This function should only return true for files");
|
||||
DN_UT_AssertF(&result, DN_OS_PathIsFile(DN_STR8("abcd/efgh")) == false, "This function should only return true for files");
|
||||
DN_UT_AssertF(&result, DN_OS_PathDelete(DN_STR8("abcd/efgh")), "Failed to delete directory");
|
||||
DN_UT_AssertF(&result, DN_OS_PathDelete(DN_STR8("abcd")), "Failed to cleanup directory");
|
||||
}
|
||||
@@ -1856,29 +1856,29 @@ static DN_UTCore DN_Tests_OS()
|
||||
for (DN_UT_Test(&result, "File write, read, copy, move and delete")) {
|
||||
// NOTE: Write step
|
||||
DN_Str8 const SRC_FILE = DN_STR8("dn_result_file");
|
||||
DN_B32 write_result = DN_OS_WriteAll(SRC_FILE, DN_STR8("1234"), nullptr);
|
||||
DN_B32 write_result = DN_OS_FileWriteAll(SRC_FILE, DN_STR8("1234"), nullptr);
|
||||
DN_UT_Assert(&result, write_result);
|
||||
DN_UT_Assert(&result, DN_OS_FileExists(SRC_FILE));
|
||||
DN_UT_Assert(&result, DN_OS_PathIsFile(SRC_FILE));
|
||||
|
||||
// NOTE: Read step
|
||||
DN_OSTLSTMem tmem = DN_OS_TLSTMem(nullptr);
|
||||
DN_Str8 read_file = DN_OS_ReadAll(tmem.arena, SRC_FILE, nullptr);
|
||||
DN_Str8 read_file = DN_OS_FileReadAllArena(tmem.arena, SRC_FILE, nullptr);
|
||||
DN_UT_AssertF(&result, DN_Str8_HasData(read_file), "Failed to load file");
|
||||
DN_UT_AssertF(&result, read_file.size == 4, "File read wrong amount of bytes (%zu)", read_file.size);
|
||||
DN_UT_AssertF(&result, DN_Str8_Eq(read_file, DN_STR8("1234")), "Read %zu bytes instead of the expected 4: '%.*s'", read_file.size, DN_STR_FMT(read_file));
|
||||
|
||||
// NOTE: Copy step
|
||||
DN_Str8 const COPY_FILE = DN_STR8("dn_result_file_copy");
|
||||
DN_B32 copy_result = DN_OS_CopyFile(SRC_FILE, COPY_FILE, true /*overwrite*/, nullptr);
|
||||
DN_B32 copy_result = DN_OS_FileCopy(SRC_FILE, COPY_FILE, true /*overwrite*/, nullptr);
|
||||
DN_UT_Assert(&result, copy_result);
|
||||
DN_UT_Assert(&result, DN_OS_FileExists(COPY_FILE));
|
||||
DN_UT_Assert(&result, DN_OS_PathIsFile(COPY_FILE));
|
||||
|
||||
// NOTE: Move step
|
||||
DN_Str8 const MOVE_FILE = DN_STR8("dn_result_file_move");
|
||||
DN_B32 move_result = DN_OS_MoveFile(COPY_FILE, MOVE_FILE, true /*overwrite*/, nullptr);
|
||||
DN_B32 move_result = DN_OS_FileMove(COPY_FILE, MOVE_FILE, true /*overwrite*/, nullptr);
|
||||
DN_UT_Assert(&result, move_result);
|
||||
DN_UT_Assert(&result, DN_OS_FileExists(MOVE_FILE));
|
||||
DN_UT_AssertF(&result, DN_OS_FileExists(COPY_FILE) == false, "Moving a file should remove the original");
|
||||
DN_UT_Assert(&result, DN_OS_PathIsFile(MOVE_FILE));
|
||||
DN_UT_AssertF(&result, DN_OS_PathIsFile(COPY_FILE) == false, "Moving a file should remove the original");
|
||||
|
||||
// NOTE: Delete step
|
||||
DN_B32 delete_src_file = DN_OS_PathDelete(SRC_FILE);
|
||||
|
||||
Reference in New Issue
Block a user