1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
* All rights reserved.
*
* The Original Code is: some of this file.
*
* */
#ifndef __BLI_MATH_COLOR_BLEND_H__
#define __BLI_MATH_COLOR_BLEND_H__
/** \file
* \ingroup bli
*/
#ifdef __cplusplus
extern "C" {
#endif
#include "BLI_math_inline.h"
/******************** Blending Modes **********************
* - byte function assume straight alpha
* - float functions assume premultiplied alpha
*/
MINLINE void blend_color_mix_byte(unsigned char dst[4],
const unsigned char src1[4],
const unsigned char src2[4]);
MINLINE void blend_color_add_byte(unsigned char dst[4],
const unsigned char src1[4],
const unsigned char src2[4]);
MINLINE void blend_color_sub_byte(unsigned char dst[4],
const unsigned char src1[4],
const unsigned char src2[4]);
MINLINE void blend_color_mul_byte(unsigned char dst[4],
const unsigned char src1[4],
const unsigned char src2[4]);
MINLINE void blend_color_lighten_byte(unsigned char dst[4],
const unsigned char src1[4],
const unsigned char src2[4]);
MINLINE void blend_color_darken_byte(unsigned char dst[4],
const unsigned char src1[4],
const unsigned char src2[4]);
MINLINE void blend_color_erase_alpha_byte(unsigned char dst[4],
const unsigned char src1[4],
const unsigned char src2[4]);
MINLINE void blend_color_add_alpha_byte(unsigned char dst[4],
const unsigned char src1[4],
const unsigned char src2[4]);
MINLINE void blend_color_overlay_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_hardlight_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_burn_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_linearburn_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_dodge_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_screen_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_softlight_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_pinlight_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_linearlight_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_vividlight_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_difference_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_exclusion_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_color_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_hue_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_saturation_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_luminosity_byte(unsigned char dst[4],
const uchar src1[4],
const uchar src2[4]);
MINLINE void blend_color_interpolate_byte(unsigned char dst[4],
const unsigned char src1[4],
const unsigned char src2[4],
float t);
MINLINE void blend_color_mix_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_add_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_sub_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_mul_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_lighten_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_darken_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_erase_alpha_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_add_alpha_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_overlay_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_hardlight_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_burn_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_linearburn_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_dodge_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_screen_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_softlight_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_pinlight_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_linearlight_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_vividlight_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_difference_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_exclusion_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_color_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_hue_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_saturation_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_luminosity_float(float dst[4], const float src1[4], const float src2[4]);
MINLINE void blend_color_interpolate_float(float dst[4],
const float src1[4],
const float src2[4],
float t);
#if BLI_MATH_DO_INLINE
# include "intern/math_color_blend_inline.c"
#endif
#ifdef __cplusplus
}
#endif
#endif /* __BLI_MATH_COLOR_BLEND_H__ */
|