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];
111# ifdef __BIG_ENDIAN__
131 linear[3] = srgb[3] * (1.0f / 255.0f);
139 if (srgb[3] == 255 || srgb[3] == 0) {
144 for (
i = 0;
i < 4;
i++) {
145 fsrgb[
i] = srgb[
i] * (1.0f / 255.0f);
161 float col[4],
const float r,
const float g,
const float b,
const float a)
182 r_col[0] = ((pack) >> 0) & 0xFF;
183 r_col[1] = ((pack) >> 8) & 0xFF;
184 r_col[2] = ((pack) >> 16) & 0xFF;
204 return (0.2126f * rgb[0]) + (0.7152f * rgb[1]) + (0.0722f * rgb[2]);
211 return (
unsigned char)(((54 * (
unsigned short)rgb[0]) + (182 * (
unsigned short)rgb[1]) +
212 (19 * (
unsigned short)rgb[2])) /
219 const unsigned char col_b[3],
222 const int r = (int)col_a[0] - (
int)col_b[0];
223 if (
abs(r) < limit) {
224 const int g = (int)col_a[1] - (
int)col_b[1];
225 if (
abs(g) < limit) {
226 const int b = (int)col_a[2] - (
int)col_b[2];
227 if (
abs(
b) < limit) {
240 const uint32_t qx = 1103515245u * ((
x >> 1u) ^ (
y));
241 const uint32_t qy = 1103515245u * ((
y >> 1u) ^ (
x));
242 const uint32_t n = 1103515245u * ((qx) ^ (qy >> 3u));
243 return float(n) * (1.0f / float(0xffffffffu));
257 unsigned char b[3],
const float f[3],
float dither,
int x,
int y)
270 if (premul[3] == 0.0f || premul[3] == 1.0f) {
271 straight[0] = premul[0];
272 straight[1] = premul[1];
273 straight[2] = premul[2];
274 straight[3] = premul[3];
277 const float alpha_inv = 1.0f / premul[3];
278 straight[0] = premul[0] * alpha_inv;
279 straight[1] = premul[1] * alpha_inv;
280 straight[2] = premul[2] * alpha_inv;
281 straight[3] = premul[3];
292 const float alpha = straight[3];
293 premul[0] = straight[0] * alpha;
294 premul[1] = straight[1] * alpha;
295 premul[2] = straight[2] * alpha;
296 premul[3] = straight[3];
306 const float alpha = color[3] * (1.0f / 255.0f);
307 const float fac = alpha * (1.0f / 255.0f);
309 result[0] = color[0] * fac;
310 result[1] = color[1] * fac;
311 result[2] = color[2] * fac;
317 if (color[3] == 0.0f || color[3] == 1.0f) {
324 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 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_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 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])