Merge remote-tracking branch 'origin/master' into blender2.8
[blender.git] / source / blender / makesdna / DNA_shader_fx_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * ***** END GPL LICENSE BLOCK *****
19  */
20
21 /** \file DNA_shader_fx_types.h
22  *  \ingroup DNA
23  */
24
25 #ifndef __DNA_SHADER_FX_TYPES_H__
26 #define __DNA_SHADER_FX_TYPES_H__
27
28 #include "DNA_defs.h"
29 #include "DNA_listBase.h"
30
31 struct DRWShadingGroup;
32
33 /* WARNING ALERT! TYPEDEF VALUES ARE WRITTEN IN FILES! SO DO NOT CHANGE!
34  * (ONLY ADD NEW ITEMS AT THE END)
35  */
36
37 typedef enum ShaderFxType {
38         eShaderFxType_None      = 0,
39         eShaderFxType_Blur      = 1,
40         eShaderFxType_Flip      = 2,
41         eShaderFxType_Light     = 3,
42         eShaderFxType_Pixel     = 4,
43         eShaderFxType_Swirl     = 5,
44         eShaderFxType_Wave      = 6,
45         eShaderFxType_Rim       = 7,
46         eShaderFxType_Colorize  = 8,
47         eShaderFxType_Shadow    = 9,
48         eShaderFxType_Glow      = 10,
49         NUM_SHADER_FX_TYPES
50 } ShaderFxType;
51
52 typedef enum ShaderFxMode {
53         eShaderFxMode_Realtime          = (1 << 0),
54         eShaderFxMode_Render            = (1 << 1),
55         eShaderFxMode_Editmode          = (1 << 2),
56         eShaderFxMode_Expanded          = (1 << 3),
57 } ShaderFxMode;
58
59 typedef enum {
60         /* This fx has been inserted in local override, and hence can be fully edited. */
61         eShaderFxFlag_StaticOverride_Local = (1 << 0),
62 } ShaderFxFlag;
63
64 typedef struct ShaderFxData {
65         struct ShaderFxData *next, *prev;
66
67         int type, mode;
68         int stackindex;
69         short flag;
70         short pad;
71         char name[64];  /* MAX_NAME */
72
73         char *error;
74 } ShaderFxData;
75
76 /* Runtime temp data */
77 typedef struct ShaderFxData_Runtime {
78         struct DRWShadingGroup *fx_sh;
79         struct DRWShadingGroup *fx_sh_b;
80         struct DRWShadingGroup *fx_sh_c;
81 } ShaderFxData_Runtime;
82
83 typedef struct BlurShaderFxData {
84         ShaderFxData shaderfx;
85         int radius[2];
86         int flag;                    /* flags */
87         int samples;                 /* number of samples */
88         float coc;                   /* circle of confusion */
89         int blur[2];                 /* not visible in rna */
90         char pad[4];
91
92         ShaderFxData_Runtime runtime;
93 } BlurShaderFxData;
94
95 typedef enum eBlurShaderFx_Flag {
96         FX_BLUR_DOF_MODE = (1 << 0)
97 } eBlurShaderFx_Flag;
98
99 typedef struct ColorizeShaderFxData {
100         ShaderFxData shaderfx;
101         int   mode;
102         float low_color[4];
103         float high_color[4];
104         float factor;
105         int flag;                    /* flags */
106         char pad[4];
107
108         ShaderFxData_Runtime runtime;
109 } ColorizeShaderFxData;
110
111 typedef enum ColorizeShaderFxModes {
112         eShaderFxColorizeMode_GrayScale = 0,
113         eShaderFxColorizeMode_Sepia = 1,
114         eShaderFxColorizeMode_BiTone = 2,
115         eShaderFxColorizeMode_Custom = 3,
116         eShaderFxColorizeMode_Transparent = 4,
117 } ColorizeShaderFxModes;
118
119 typedef struct FlipShaderFxData {
120         ShaderFxData shaderfx;
121         int flag;                    /* flags */
122         int flipmode;  /* internal, not visible in rna */
123         ShaderFxData_Runtime runtime;
124 } FlipShaderFxData;
125
126 typedef enum eFlipShaderFx_Flag {
127         FX_FLIP_HORIZONTAL = (1 << 0),
128         FX_FLIP_VERTICAL = (1 << 1),
129 } eFlipShaderFx_Flag;
130
131 typedef struct GlowShaderFxData {
132         ShaderFxData shaderfx;
133         float glow_color[3];
134         float select_color[3];
135         float threshold;
136         int   flag; /* flags */
137         int   mode;
138         int   blur[2];
139         int   samples;
140         ShaderFxData_Runtime runtime;
141 } GlowShaderFxData;
142
143 typedef enum GlowShaderFxModes {
144         eShaderFxGlowMode_Luminance = 0,
145         eShaderFxGlowMode_Color = 1,
146 } GlowShaderFxModes;
147
148 typedef enum eGlowShaderFx_Flag {
149         FX_GLOW_USE_ALPHA = (1 << 0),
150 } eGlowShaderFx_Flag;
151
152 typedef struct LightShaderFxData {
153         ShaderFxData shaderfx;
154         struct Object *object;
155         int flag;                    /* flags */
156         float energy;
157         float ambient;
158         float loc[4]; /* internal, not visible in rna */
159         char pad[4];
160         ShaderFxData_Runtime runtime;
161 } LightShaderFxData;
162
163 typedef struct PixelShaderFxData {
164         ShaderFxData shaderfx;
165         int size[3];                 /* last element used for shader only */
166         int flag;                    /* flags */
167         float rgba[4];
168         ShaderFxData_Runtime runtime;
169 } PixelShaderFxData;
170
171 typedef enum ePixelShaderFx_Flag {
172         FX_PIXEL_USE_LINES = (1 << 0),
173 } ePixelShaderFx_Flag;
174
175 typedef struct RimShaderFxData {
176         ShaderFxData shaderfx;
177         int offset[2];
178         int flag;                    /* flags */
179         float rim_rgb[3];
180         float mask_rgb[3];
181         int   mode;
182         int   blur[2];
183         int   samples;
184         char pad[4];
185         ShaderFxData_Runtime runtime;
186 } RimShaderFxData;
187
188 typedef enum RimShaderFxModes {
189         eShaderFxRimMode_Normal = 0,
190         eShaderFxRimMode_Overlay = 1,
191         eShaderFxRimMode_Add = 2,
192         eShaderFxRimMode_Subtract = 3,
193         eShaderFxRimMode_Multiply = 4,
194         eShaderFxRimMode_Divide = 5,
195 } RimShaderFxModes;
196
197 typedef struct ShadowShaderFxData {
198         ShaderFxData shaderfx;
199         struct Object *object;
200         int offset[2];
201         int flag;                    /* flags */
202         float shadow_rgba[4];
203         float amplitude;
204         float period;
205         float phase;
206         int orientation;
207         float scale[2];
208         float rotation;
209         int   blur[2];
210         int   samples;
211         char pad[4];
212         ShaderFxData_Runtime runtime;
213 } ShadowShaderFxData;
214
215 typedef enum eShadowShaderFx_Flag {
216         FX_SHADOW_USE_OBJECT = (1 << 0),
217         FX_SHADOW_USE_WAVE   = (1 << 1),
218 } eShadowShaderFx_Flag;
219
220 typedef struct SwirlShaderFxData {
221         ShaderFxData shaderfx;
222         struct Object *object;
223         int flag;                    /* flags */
224         int radius;
225         float angle;
226         int transparent;  /* not visible in rna */
227         ShaderFxData_Runtime runtime;
228 } SwirlShaderFxData;
229
230 typedef enum eSwirlShaderFx_Flag {
231         FX_SWIRL_MAKE_TRANSPARENT = (1 << 0),
232 } eSwirlShaderFx_Flag;
233
234 typedef struct WaveShaderFxData {
235         ShaderFxData shaderfx;
236         float amplitude;
237         float period;
238         float phase;
239         int orientation;
240         int flag;                    /* flags */
241         char pad[4];
242         ShaderFxData_Runtime runtime;
243 } WaveShaderFxData;
244 #endif  /* __DNA_SHADER_FX_TYPES_H__ */