21 INLINE
float decode_sRGB_float(
unsigned char val) {
22 return to_linear_float_table[val];
32 INLINE
float decode_sRGB_float(
float val) {
33 return (val <= 0.04045f)
34 ? (val * (1.f / 12.92f))
35 : cpow((val + 0.055f) * (1.f / 1.055f), 2.4f);
43 INLINE
unsigned char decode_sRGB_uchar(
unsigned char val) {
44 return to_linear_uchar_table[val];
53 INLINE
unsigned char decode_sRGB_uchar(
float val) {
54 return (val <= 0.04045f)
55 ? (
unsigned char)(max(0.f, val) * (255.f / 12.92f) + 0.5f)
56 : (
unsigned char)(cpow((min(val, 1.f) + 0.055f) * (1.f / 1.055f), 2.4f) * 255.f + 0.5f);
65 encode_sRGB_float(
unsigned char val) {
69 : (1.055f * cpow((
float)val * (1.f / 255.f), 0.41666f) - 0.055);
80 encode_sRGB_float(
float val) {
81 return (val < 0.0031308f)
83 : (1.055f * cpow(val, 0.41666f) - 0.055);
92 encode_sRGB_uchar(
unsigned char val) {
93 return to_srgb8_table[val];
110 encode_sRGB_uchar(
float val) {
111 #if defined(__SSE2__) || (_M_IX86_FP >= 2) || defined(_M_X64) || defined(_M_AMD64)
114 return encode_sRGB_uchar_sse2(val);
116 return (val < 0.0031308f)
117 ? (
unsigned char) (max(0.f, val) * 3294.6f + 0.5f)
118 : (
unsigned char) (269.025f * cpow(min(val, 1.f), 0.41666f) - 13.525f);
136 #if defined(__SSE2__) || (_M_IX86_FP >= 2) || defined(_M_X64) || defined(_M_AMD64)
138 encode_sRGB_uchar_sse2(color, into);
142 encode_sRGB_uchar(color[0]),
143 encode_sRGB_uchar(color[1]),
144 encode_sRGB_uchar(color[2]));
162 encode_sRGB_uchar(
const LColorf &color,
xel &into, xelval &into_alpha) {
163 #if defined(__SSE2__) || (_M_IX86_FP >= 2) || defined(_M_X64) || defined(_M_AMD64)
165 encode_sRGB_uchar_sse2(color, into, into_alpha);
169 encode_sRGB_uchar(color[0]),
170 encode_sRGB_uchar(color[1]),
171 encode_sRGB_uchar(color[2]));
173 into_alpha = (xelval) (color[3] * 255.f + 0.5f);
This is the base class for all three-component vectors and points.