14#ifndef __MATH_COLOR_INLINE_C__
15# define __MATH_COLOR_INLINE_C__
54 float alpha, inv_alpha;
56 if (srgb[3] == 1.0f || srgb[3] == 0.0f) {
62 inv_alpha = 1.0f / alpha;
65 linear[0] = srgb[0] * inv_alpha;
66 linear[1] = srgb[1] * inv_alpha;
67 linear[2] = srgb[2] * inv_alpha;
77 float alpha, inv_alpha;
79 if (linear[3] == 1.0f || linear[3] == 0.0f) {
85 inv_alpha = 1.0f / alpha;
88 srgb[0] = linear[0] * inv_alpha;
89 srgb[1] = linear[1] * inv_alpha;
90 srgb[2] = linear[2] * inv_alpha;
108 unsigned short us[2];
128 linear[3] = srgb[3] * (1.0f / 255.0f);
136 if (srgb[3] == 255 || srgb[3] == 0) {
141 for (
i = 0;
i < 4;
i++) {
142 fsrgb[
i] = srgb[
i] * (1.0f / 255.0f);
150 r_col[0] =
float(col_ub[0]) * (1.0f / 255.0f);
151 r_col[1] =
float(col_ub[1]) * (1.0f / 255.0f);
152 r_col[2] =
float(col_ub[2]) * (1.0f / 255.0f);
157 r_col[0] =
float(col_ub[0]) * (1.0f / 255.0f);
158 r_col[1] =
float(col_ub[1]) * (1.0f / 255.0f);
159 r_col[2] =
float(col_ub[2]) * (1.0f / 255.0f);
160 r_col[3] =
float(col_ub[3]) * (1.0f / 255.0f);
183 float col[4],
const float r,
const float g,
const float b,
const float a)
204 r_col[0] = ((pack) >> 0) & 0xFF;
205 r_col[1] = ((pack) >> 8) & 0xFF;
206 r_col[2] = ((pack) >> 16) & 0xFF;
226 return (0.2126f * rgb[0]) + (0.7152f * rgb[1]) + (0.0722f * rgb[2]);
233 return (
unsigned char)(((54 * (
unsigned short)rgb[0]) + (182 * (
unsigned short)rgb[1]) +
234 (19 * (
unsigned short)rgb[2])) /
241 const unsigned char col_b[3],
244 const int r = (int)col_a[0] - (
int)col_b[0];
245 if (
abs(r) < limit) {
246 const int g = (int)col_a[1] - (
int)col_b[1];
247 if (
abs(g) < limit) {
248 const int b = (int)col_a[2] - (
int)col_b[2];
249 if (
abs(
b) < limit) {
262 const uint32_t qx = 1103515245u * ((
x >> 1u) ^ (
y));
263 const uint32_t qy = 1103515245u * ((
y >> 1u) ^ (
x));
264 const uint32_t n = 1103515245u * ((qx) ^ (qy >> 3u));
265 return float(n) * (1.0f /
float(0xffffffffu));
279 unsigned char b[3],
const float f[3],
float dither,
int x,
int y)
292 if (premul[3] == 0.0f || premul[3] == 1.0f) {
293 straight[0] = premul[0];
294 straight[1] = premul[1];
295 straight[2] = premul[2];
296 straight[3] = premul[3];
299 const float alpha_inv = 1.0f / premul[3];
300 straight[0] = premul[0] * alpha_inv;
301 straight[1] = premul[1] * alpha_inv;
302 straight[2] = premul[2] * alpha_inv;
303 straight[3] = premul[3];
314 const float alpha = straight[3];
315 premul[0] = straight[0] * alpha;
316 premul[1] = straight[1] * alpha;
317 premul[2] = straight[2] * alpha;
318 premul[3] = straight[3];
328 const float alpha = color[3] * (1.0f / 255.0f);
329 const float fac = alpha * (1.0f / 255.0f);
331 result[0] = color[0] * fac;
332 result[1] = color[1] * fac;
333 result[2] = color[2] * fac;
339 if (color[3] == 0.0f || color[3] == 1.0f) {
346 const float alpha_inv = 1.0f / color[3];
MINLINE float signf(float f)
void linearrgb_to_srgb_v3_v3(float srgb[3], const float linear[3])
void srgb_to_linearrgb_v3_v3(float linear[3], const float srgb[3])
ATTR_WARN_UNUSED_RESULT const BMVert * v
MINLINE unsigned char unit_float_to_uchar_clamp(float val)
#define unit_float_to_uchar_clamp_v4(v1, v2)
MINLINE unsigned short unit_float_to_ushort_clamp(float val)
#define unit_float_to_uchar_clamp_v3(v1, v2)
ushort BLI_color_to_srgb_table[0x10000]
float BLI_color_from_srgb_table[256]
MINLINE void straight_to_premul_v4_v4(float premul[4], const float straight[4])
MINLINE void srgb_to_linearrgb_uchar4_predivide(float linear[4], const unsigned char srgb[4])
MINLINE void rgba_uchar_args_set(uchar col[4], const uchar r, const uchar g, const uchar b, const uchar a)
MINLINE void straight_uchar_to_premul_float(float result[4], const unsigned char color[4])
MINLINE void premul_to_straight_v4(float color[4])
MINLINE void straight_to_premul_v4(float color[4])
MINLINE void rgba_float_args_set(float col[4], const float r, const float g, const float b, const float a)
MINLINE void linearrgb_to_srgb_ushort4(unsigned short srgb[4], const float linear[4])
MINLINE void cpack_cpy_3ub(unsigned char r_col[3], const unsigned int pack)
MINLINE void linearrgb_to_srgb_predivide_v4(float srgb[4], const float linear[4])
MINLINE float dither_random_value(int x, int y)
MINLINE void srgb_to_linearrgb_uchar4(float linear[4], const unsigned char srgb[4])
MINLINE float hash_iqint3_f(const uint32_t x, const uint32_t y)
MINLINE void rgb_uchar_to_float(float r_col[3], const uchar col_ub[3])
MINLINE int compare_rgb_uchar(const unsigned char col_a[3], const unsigned char col_b[3], const int limit)
MINLINE void srgb_to_linearrgb_v4(float linear[4], const float srgb[4])
MINLINE void float_to_byte_dither_v3(unsigned char b[3], const float f[3], float dither, int x, int y)
MINLINE void premul_to_straight_v4_v4(float straight[4], const float premul[4])
MINLINE void linearrgb_to_srgb_uchar4(unsigned char srgb[4], const float linear[4])
MINLINE void rgba_float_to_uchar(uchar r_col[4], const float col_f[4])
MINLINE void rgba_uchar_args_test_set(uchar col[4], const uchar r, const uchar g, const uchar b, const uchar a)
MINLINE unsigned char srgb_to_grayscale_byte(const unsigned char rgb[3])
MINLINE unsigned short to_srgb_table_lookup(const float f)
MINLINE void linearrgb_to_srgb_v4(float srgb[4], const float linear[4])
MINLINE void linearrgb_to_srgb_uchar3(unsigned char srgb[3], const float linear[3])
MINLINE void rgba_uchar_to_float(float r_col[4], const uchar col_ub[4])
MINLINE void srgb_to_linearrgb_predivide_v4(float linear[4], const float srgb[4])
MINLINE void premul_float_to_straight_uchar(unsigned char *result, const float color[4])
MINLINE float srgb_to_grayscale(const float rgb[3])
MINLINE void rgb_float_to_uchar(uchar r_col[3], const float col_f[3])