Renderer/util.cpp

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);
}