138 lines
2.1 KiB
C++
138 lines
2.1 KiB
C++
#define KB(x) (x*1024)
|
|
#define MB(x) (KB(x)*1024)
|
|
#define GB(x) (MB(x)*1024)
|
|
|
|
Vec4
|
|
U32ToVec4(u32 src)
|
|
{
|
|
Vec4 col = {};
|
|
|
|
if(src)
|
|
{
|
|
col.r = (f32)(((src >> 0 ) & 0xFF) / 255.0f);
|
|
col.g = (f32)(((src >> 8 ) & 0xFF) / 255.0f);
|
|
col.b = (f32)(((src >> 16) & 0xFF) / 255.0f);
|
|
col.a = (f32)(((src >> 24) & 0xFF) / 255.0f);
|
|
}
|
|
else
|
|
{
|
|
col.r = col.g = col.b = 0.0f;
|
|
col.a = 1.0f;
|
|
}
|
|
|
|
return col;
|
|
}
|
|
|
|
f32
|
|
Radians(f32 deg)
|
|
{
|
|
return deg * (M_PI/180.0f);
|
|
}
|
|
|
|
Mat4
|
|
IdentityMatrix()
|
|
{
|
|
Mat4 mat;
|
|
glm_mat4_identity(mat.matrix);
|
|
return mat;
|
|
}
|
|
|
|
Mat4
|
|
Perspective(f32 fov, f32 aspect, f32 near, f32 far)
|
|
{
|
|
Mat4 mat;
|
|
glm_perspective(fov, aspect, near, far, mat.matrix);
|
|
return mat;
|
|
}
|
|
|
|
Mat4
|
|
LookAt(Vec3 eye, Vec3 center, Vec3 up)
|
|
{
|
|
Mat4 mat = IdentityMatrix();
|
|
glm_lookat(eye.v, center.v, up.v, mat.matrix);
|
|
return mat;
|
|
}
|
|
|
|
Mat4
|
|
Translate(Mat4 mat, Vec3 vec)
|
|
{
|
|
Mat4 result = mat;
|
|
glm_translate(result.matrix, vec.v);
|
|
return result;
|
|
}
|
|
|
|
bool
|
|
StartsWith(String8 value, String8 search_string)
|
|
{
|
|
bool result;
|
|
|
|
if(value.length >= search_string.length)
|
|
{
|
|
result = strncmp((const char *)value.ptr, (const char *)search_string.ptr, search_string.length) == 0;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
String8
|
|
SPrintf(u8 *buffer, const char *format, ...)
|
|
{
|
|
va_list args;
|
|
|
|
va_start(args, format);
|
|
int written = vsprintf((char *)buffer, (char *)format, args);
|
|
va_end(args);
|
|
|
|
return String8(buffer);
|
|
}
|
|
|
|
String8
|
|
Copy(String8 str, u64 start, u64 end)
|
|
{
|
|
String8 result = {
|
|
.ptr = ScratchAllocPtrArray<u8>(end+1-start),
|
|
.length = end-start,
|
|
};
|
|
|
|
memcpy(result.ch_ptr, str.ch_ptr+start, result.length);
|
|
result.ptr[result.length] = '\0';
|
|
|
|
return result;
|
|
}
|
|
|
|
String8
|
|
GetFilePath(String8 file_name)
|
|
{
|
|
String8 result = file_name;
|
|
|
|
for(u64 i = file_name.length-1; (i64)i >= 0; i -= 1)
|
|
{
|
|
#ifdef _WIN32
|
|
char ch = '\\';
|
|
#else
|
|
char ch = '/';
|
|
#endif
|
|
|
|
if(file_name[i] == ch)
|
|
{
|
|
result = Copy(file_name, 0, i+1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
void
|
|
Logf(const char *format, ...)
|
|
{
|
|
char buffer[1024];
|
|
va_list args;
|
|
|
|
va_start(args, format);
|
|
vsprintf((char *)buffer, format, args);
|
|
va_end(args);
|
|
|
|
printf("%s\n", buffer);
|
|
}
|