15 static color c(1.0f, 1.0f, 1.0f, 1.0f);
20 static color c(0.0f, 0.0f, 0.0f, 1.0f);
25 static color c(0.0f, 0.0f, 0.0f, 0.0f);
30 static color c(1.0f, 0.0f, 0.0f, 1.0f);
35 static color c(1.0f, 0.0f, 1.0f, 1.0f);
46 return random(std::string(seed));
57 std::hash<std::string> hasher;
58 std::size_t hash_value = hasher(seed);
61 auto lcg = [](std::size_t& state) ->
float {
62 state = (state * 1103515245u + 12345u) & 0x7fffffffu;
63 return static_cast<float>(state) /
static_cast<float>(0x7fffffffu);
66 std::size_t state = hash_value;
69 float hue = lcg(state);
72 float saturation = 0.4f + 0.6f * lcg(state);
75 float value = 0.6f + 0.4f * lcg(state);
77 return hsv(hue, saturation,
value, 1.0f);
88 float sc = 1.0f / 255.0f;
89 value.x = (float)r * sc;
90 value.y = (float)g * sc;
96 float sc = 1.0f / 255.0f;
97 value.x = (float)(rgba & 0xFF) * sc;
98 value.y = (float)((rgba >> 8) & 0xFF) * sc;
99 value.z = (float)((rgba >> 16) & 0xFF) * sc;
100 value.w = (float)(rgba >> 24) * sc;
102 color(
float r,
float g,
float b,
float a = 1.0f)
113 inline operator std::uint32_t()
const
117 inline operator vec4()
const
122 inline void set_hsv(
float h,
float s,
float v,
float a = 1.0f)
128 static color hsv(
float h,
float s,
float v,
float a = 1.0f)
137 float s = 1.0f / 255.0f;
138 return vec4((in & 0xFF) * s, ((in >> 8) & 0xFF) * s, ((in >> 16) & 0xFF) * s, (in >> 24) * s);
144 out = ((std::uint32_t)(saturate(in.x) * 255.0f));
145 out |= ((std::uint32_t)(saturate(in.y) * 255.0f)) << 8;
146 out |= ((std::uint32_t)(saturate(in.z) * 255.0f)) << 16;
147 out |= ((std::uint32_t)(saturate(in.w) * 255.0f)) << 24;
154 static void rgb_to_hsv(
float r,
float g,
float b,
float& out_h,
float& out_s,
float& out_v)
172 const float chroma = r - (g <
b ? g :
b);
173 out_h = glm::abs(K + (g -
b) / (6.f * chroma + 1e-20f));
174 out_s = chroma / (r + 1e-20f);
181 static void hsv_to_rgb(
float h,
float s,
float v,
float& out_r,
float& out_g,
float& out_b)
186 out_r = out_g = out_b = v;
190 h = glm::mod(h, 1.0f) / (60.0f / 360.0f);
192 float f = h - float(i);
193 float p = v * (1.0f - s);
194 float q = v * (1.0f - s * f);
195 float t = v * (1.0f - s * (1.0f - f));
static vec4 u32_to_float4(std::uint32_t in)
void set_hsv(float h, float s, float v, float a=1.0f)
static color random(const std::string &seed)
Generates a consistent random color based on a string seed.
color(std::uint32_t rgba)
static void rgb_to_hsv(float r, float g, float b, float &out_h, float &out_s, float &out_v)
static std::uint32_t float4_to_u32(const vec4 &in)
static color random(const char *seed)
Generates a consistent random color based on a string seed.
static color transparent()
static void hsv_to_rgb(float h, float s, float v, float &out_r, float &out_g, float &out_b)
static color hsv(float h, float s, float v, float a=1.0f)
color(int r, int g, int b, int a=255)
color(float r, float g, float b, float a=1.0f)