#define KB(x) (x*1024) #define MB(x) (KB(x)*1024) #define GB(x) (MB(x)*1024) 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(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); }