#include "pch.h" #include "log.h" #include "util.h" bool point_in_rect(const glm::vec2& p, const glm::vec4& r) { return p.x > r.x && p.x < r.x+r.z && p.y > r.y && p.y < r.y+r.w; } glm::vec4 rand_color() { float r = (rand() % 256) / 256.f; float g = (rand() % 256) / 256.f; float b = (rand() % 256) / 256.f; return { r, g, b, 1.f }; } glm::vec3 convert_hsv2rgb(const glm::vec3 c) { glm::vec4 K = glm::vec4(1.0f, 2.0f / 3.0f, 1.0f / 3.0f, 3.0f); glm::vec3 p = glm::abs(glm::fract(glm::vec3(c.xxx + K.xyz)) * 6.0f - K.www); auto tmp = glm::clamp(glm::vec3(p - K.xxx), 0.0f, 1.0f); return c.z * glm::mix(glm::vec3(K.xxx), tmp, c.y); } glm::vec3 convert_rgb2hsv(const glm::vec3 c) { glm::vec4 K = glm::vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); //glm::vec4 p = mix(glm::vec4(c.bg, K.wz), glm::vec4(c.gb, K.xy), glm::step(c.b, c.g)); //glm::vec4 q = mix(glm::vec4(p.xyw, c.r), glm::vec4(c.r, p.yzx), glm::step(p.x, c.r)); glm::vec4 p = c.g < c.b ? glm::vec4(c.bg, K.wz) : glm::vec4(c.gb, K.xy); glm::vec4 q = c.r < p.x ? glm::vec4(p.xyw, c.r) : glm::vec4(c.r, p.yzx); float d = q.x - glm::min(q.w, q.y); float e = 1.0e-10f; return glm::vec3(fabs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); } static const char* gl2str(GLenum err) { switch (err) { case GL_NO_ERROR: return "GL_NO_ERROR"; case GL_INVALID_ENUM: return "GL_INVALID_ENUM"; case GL_INVALID_VALUE: return "GL_INVALID_VALUE"; case GL_INVALID_OPERATION: return "GL_INVALID_OPERATION"; case GL_INVALID_FRAMEBUFFER_OPERATION: return "GL_INVALID_FRAMEBUFFER_OPERATION"; case GL_OUT_OF_MEMORY: return "GL_OUT_OF_MEMORY"; default: return "Unknown"; } } double now_seconds() { time_t timer; struct tm y2k = { 0 }; double seconds; y2k.tm_hour = 0; y2k.tm_min = 0; y2k.tm_sec = 0; y2k.tm_year = 100; y2k.tm_mon = 0; y2k.tm_mday = 1; time(&timer); /* get current time; same as: timer = time(NULL) */ seconds = difftime(timer, mktime(&y2k)); } void check_OpenGLError(const char* stmt, const char* fname, int line) { GLenum err; while ((err = glGetError()) != GL_NO_ERROR) { LOG("OpenGL error %08x (%s), at %s:%i - for %s", err, gl2str(err), fname, line, stmt); } } #ifdef _DEBUG #define GL(stmt) stmt; CheckOpenGLError(#stmt, __FILE__, __LINE__); #else #define GL(stmt) stmt #endif