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