281 lines
7.0 KiB
Lua
281 lines
7.0 KiB
Lua
|
|
local ffi = require( "ffi" )
|
||
|
|
|
||
|
|
local libs = ffi_hmm_dll or {
|
||
|
|
OSX = { x64 = "hmm_dll" },
|
||
|
|
Windows = { x64 = "hmm_dll.dll" },
|
||
|
|
Linux = { x64 = "hmm_dll.so", arm = "hmm_dll.so" },
|
||
|
|
BSD = { x64 = "hmm_dll.so" },
|
||
|
|
POSIX = { x64 = "hmm_dll.so" },
|
||
|
|
Other = { x64 = "hmm_dll.so" },
|
||
|
|
}
|
||
|
|
|
||
|
|
local lib = ffi_hmm_dll or libs[ ffi.os ][ ffi.arch ]
|
||
|
|
local hmm_lib = ffi.load( lib )
|
||
|
|
|
||
|
|
ffi.cdef[[
|
||
|
|
|
||
|
|
/********** hmm_lib ****************************************************************/
|
||
|
|
|
||
|
|
typedef union hmm_vec2
|
||
|
|
{
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
float X, Y;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
float U, V;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
float Left, Right;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
float Width, Height;
|
||
|
|
};
|
||
|
|
|
||
|
|
float Elements[2];
|
||
|
|
} hmm_vec2;
|
||
|
|
|
||
|
|
typedef union hmm_vec3
|
||
|
|
{
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
float X, Y, Z;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
float U, V, W;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
float R, G, B;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
hmm_vec2 XY;
|
||
|
|
float Ignored0_;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
float Ignored1_;
|
||
|
|
hmm_vec2 YZ;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
hmm_vec2 UV;
|
||
|
|
float Ignored2_;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
float Ignored3_;
|
||
|
|
hmm_vec2 VW;
|
||
|
|
};
|
||
|
|
|
||
|
|
float Elements[3];
|
||
|
|
} hmm_vec3;
|
||
|
|
|
||
|
|
typedef union hmm_vec4
|
||
|
|
{
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
union
|
||
|
|
{
|
||
|
|
hmm_vec3 XYZ;
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
float X, Y, Z;
|
||
|
|
};
|
||
|
|
};
|
||
|
|
|
||
|
|
float W;
|
||
|
|
};
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
union
|
||
|
|
{
|
||
|
|
hmm_vec3 RGB;
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
float R, G, B;
|
||
|
|
};
|
||
|
|
};
|
||
|
|
|
||
|
|
float A;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
hmm_vec2 XY;
|
||
|
|
float Ignored0_;
|
||
|
|
float Ignored1_;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
float Ignored2_;
|
||
|
|
hmm_vec2 YZ;
|
||
|
|
float Ignored3_;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
float Ignored4_;
|
||
|
|
float Ignored5_;
|
||
|
|
hmm_vec2 ZW;
|
||
|
|
};
|
||
|
|
|
||
|
|
float Elements[4];
|
||
|
|
} hmm_vec4;
|
||
|
|
|
||
|
|
typedef union hmm_mat4
|
||
|
|
{
|
||
|
|
float Elements[4][4];
|
||
|
|
|
||
|
|
} hmm_mat4;
|
||
|
|
|
||
|
|
typedef union hmm_quaternion
|
||
|
|
{
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
union
|
||
|
|
{
|
||
|
|
hmm_vec3 XYZ;
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
float X, Y, Z;
|
||
|
|
};
|
||
|
|
};
|
||
|
|
|
||
|
|
float W;
|
||
|
|
};
|
||
|
|
|
||
|
|
float Elements[4];
|
||
|
|
} hmm_quaternion;
|
||
|
|
|
||
|
|
typedef int32_t hmm_bool;
|
||
|
|
|
||
|
|
typedef hmm_vec2 hmm_v2;
|
||
|
|
typedef hmm_vec3 hmm_v3;
|
||
|
|
typedef hmm_vec4 hmm_v4;
|
||
|
|
typedef hmm_mat4 hmm_m4;
|
||
|
|
|
||
|
|
float HMM_SinF(float Angle);
|
||
|
|
float HMM_TanF(float Angle);
|
||
|
|
float HMM_ATanF(float Theta);
|
||
|
|
float HMM_ATan2F(float Theta, float Theta2);
|
||
|
|
float HMM_CosF(float Angle);
|
||
|
|
float HMM_ACosF(float Theta);
|
||
|
|
float HMM_ExpF(float Float);
|
||
|
|
float HMM_LogF(float Float);
|
||
|
|
|
||
|
|
float HMM_ToRadians(float Degrees);
|
||
|
|
float HMM_SquareRootF(float Float);
|
||
|
|
float HMM_RSquareRootF(float Float);
|
||
|
|
|
||
|
|
float HMM_LengthSquaredVec2(hmm_vec2 A);
|
||
|
|
float HMM_LengthSquaredVec3(hmm_vec3 A);
|
||
|
|
float HMM_LengthSquaredVec4(hmm_vec4 A);
|
||
|
|
|
||
|
|
float HMM_LengthVec2(hmm_vec2 A);
|
||
|
|
float HMM_LengthVec3(hmm_vec3 A);
|
||
|
|
float HMM_LengthVec4(hmm_vec4 A);
|
||
|
|
|
||
|
|
float HMM_Power(float Base, int Exponent);
|
||
|
|
float HMM_PowerF(float Base, float Exponent);
|
||
|
|
float HMM_Lerp(float A, float Time, float B);
|
||
|
|
float HMM_Clamp(float Min, float Value, float Max);
|
||
|
|
|
||
|
|
hmm_vec2 HMM_NormalizeVec2(hmm_vec2 A);
|
||
|
|
hmm_vec3 HMM_NormalizeVec3(hmm_vec3 A);
|
||
|
|
hmm_vec4 HMM_NormalizeVec4(hmm_vec4 A);
|
||
|
|
|
||
|
|
float HMM_DotVec2(hmm_vec2 VecOne, hmm_vec2 VecTwo);
|
||
|
|
float HMM_DotVec3(hmm_vec3 VecOne, hmm_vec3 VecTwo);
|
||
|
|
float HMM_DotVec4(hmm_vec4 VecOne, hmm_vec4 VecTwo);
|
||
|
|
|
||
|
|
hmm_vec3 HMM_Cross(hmm_vec3 VecOne, hmm_vec3 VecTwo);
|
||
|
|
|
||
|
|
hmm_vec2 HMM_Vec2(float X, float Y);
|
||
|
|
hmm_vec2 HMM_Vec2i(int X, int Y);
|
||
|
|
hmm_vec3 HMM_Vec3(float X, float Y, float Z);
|
||
|
|
hmm_vec3 HMM_Vec3i(int X, int Y, int Z);
|
||
|
|
hmm_vec4 HMM_Vec4(float X, float Y, float Z, float W);
|
||
|
|
hmm_vec4 HMM_Vec4i(int X, int Y, int Z, int W);
|
||
|
|
hmm_vec4 HMM_Vec4v(hmm_vec3 Vector, float W);
|
||
|
|
|
||
|
|
hmm_vec2 HMM_AddVec2(hmm_vec2 Left, hmm_vec2 Right);
|
||
|
|
hmm_vec3 HMM_AddVec3(hmm_vec3 Left, hmm_vec3 Right);
|
||
|
|
hmm_vec4 HMM_AddVec4(hmm_vec4 Left, hmm_vec4 Right);
|
||
|
|
|
||
|
|
hmm_vec2 HMM_SubtractVec2(hmm_vec2 Left, hmm_vec2 Right);
|
||
|
|
hmm_vec3 HMM_SubtractVec3(hmm_vec3 Left, hmm_vec3 Right);
|
||
|
|
hmm_vec4 HMM_SubtractVec4(hmm_vec4 Left, hmm_vec4 Right);
|
||
|
|
|
||
|
|
hmm_vec2 HMM_MultiplyVec2(hmm_vec2 Left, hmm_vec2 Right);
|
||
|
|
hmm_vec2 HMM_MultiplyVec2f(hmm_vec2 Left, float Right);
|
||
|
|
hmm_vec3 HMM_MultiplyVec3(hmm_vec3 Left, hmm_vec3 Right);
|
||
|
|
hmm_vec3 HMM_MultiplyVec3f(hmm_vec3 Left, float Right);
|
||
|
|
hmm_vec4 HMM_MultiplyVec4(hmm_vec4 Left, hmm_vec4 Right);
|
||
|
|
hmm_vec4 HMM_MultiplyVec4f(hmm_vec4 Left, float Right);
|
||
|
|
|
||
|
|
hmm_vec2 HMM_DivideVec2(hmm_vec2 Left, hmm_vec2 Right);
|
||
|
|
hmm_vec2 HMM_DivideVec2f(hmm_vec2 Left, float Right);
|
||
|
|
hmm_vec3 HMM_DivideVec3(hmm_vec3 Left, hmm_vec3 Right);
|
||
|
|
hmm_vec3 HMM_DivideVec3f(hmm_vec3 Left, float Right);
|
||
|
|
hmm_vec4 HMM_DivideVec4(hmm_vec4 Left, hmm_vec4 Right);
|
||
|
|
hmm_vec4 HMM_DivideVec4f(hmm_vec4 Left, float Right);
|
||
|
|
|
||
|
|
hmm_bool HMM_EqualsVec2(hmm_vec2 Left, hmm_vec2 Right);
|
||
|
|
hmm_bool HMM_EqualsVec3(hmm_vec3 Left, hmm_vec3 Right);
|
||
|
|
hmm_bool HMM_EqualsVec4(hmm_vec4 Left, hmm_vec4 Right);
|
||
|
|
|
||
|
|
hmm_mat4 HMM_Mat4(void);
|
||
|
|
hmm_mat4 HMM_Mat4d(float Diagonal);
|
||
|
|
hmm_mat4 HMM_AddMat4(hmm_mat4 Left, hmm_mat4 Right);
|
||
|
|
hmm_mat4 HMM_SubtractMat4(hmm_mat4 Left, hmm_mat4 Right);
|
||
|
|
|
||
|
|
hmm_mat4 HMM_MultiplyMat4(hmm_mat4 Left, hmm_mat4 Right);
|
||
|
|
hmm_mat4 HMM_MultiplyMat4f(hmm_mat4 Matrix, float Scalar);
|
||
|
|
hmm_vec4 HMM_MultiplyMat4ByVec4(hmm_mat4 Matrix, hmm_vec4 Vector);
|
||
|
|
hmm_mat4 HMM_DivideMat4f(hmm_mat4 Matrix, float Scalar);
|
||
|
|
|
||
|
|
hmm_mat4 HMM_Transpose(hmm_mat4 Matrix);
|
||
|
|
|
||
|
|
hmm_mat4 HMM_Orthographic(float Left, float Right, float Bottom, float Top, float Near, float Far);
|
||
|
|
hmm_mat4 HMM_Perspective(float FOV, float AspectRatio, float Near, float Far);
|
||
|
|
|
||
|
|
hmm_mat4 HMM_Translate(hmm_vec3 Translation);
|
||
|
|
hmm_mat4 HMM_Rotate(float Angle, hmm_vec3 Axis);
|
||
|
|
hmm_mat4 HMM_Scale(hmm_vec3 Scale);
|
||
|
|
|
||
|
|
hmm_mat4 HMM_LookAt(hmm_vec3 Eye, hmm_vec3 Center, hmm_vec3 Up);
|
||
|
|
|
||
|
|
hmm_quaternion HMM_Quaternion(float X, float Y, float Z, float W);
|
||
|
|
hmm_quaternion HMM_QuaternionV4(hmm_vec4 Vector);
|
||
|
|
hmm_quaternion HMM_AddQuaternion(hmm_quaternion Left, hmm_quaternion Right);
|
||
|
|
hmm_quaternion HMM_SubtractQuaternion(hmm_quaternion Left, hmm_quaternion Right);
|
||
|
|
hmm_quaternion HMM_MultiplyQuaternion(hmm_quaternion Left, hmm_quaternion Right);
|
||
|
|
hmm_quaternion HMM_MultiplyQuaternionF(hmm_quaternion Left, float Multiplicative);
|
||
|
|
hmm_quaternion HMM_DivideQuaternionF(hmm_quaternion Left, float Dividend);
|
||
|
|
hmm_quaternion HMM_InverseQuaternion(hmm_quaternion Left);
|
||
|
|
float HMM_DotQuaternion(hmm_quaternion Left, hmm_quaternion Right);
|
||
|
|
hmm_quaternion HMM_NormalizeQuaternion(hmm_quaternion Left);
|
||
|
|
hmm_quaternion HMM_NLerp(hmm_quaternion Left, float Time, hmm_quaternion Right);
|
||
|
|
hmm_quaternion HMM_Slerp(hmm_quaternion Left, float Time, hmm_quaternion Right);
|
||
|
|
hmm_mat4 HMM_QuaternionToMat4(hmm_quaternion Left);
|
||
|
|
hmm_quaternion HMM_QuaternionFromAxisAngle(hmm_vec3 Axis, float AngleOfRotation);
|
||
|
|
|
||
|
|
]]
|
||
|
|
|
||
|
|
return hmm_lib
|