Fix T59446: Grease pencil mirror modifier wrong
[blender.git] / source / blender / makesdna / DNA_material_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  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file DNA_material_types.h
29  *  \ingroup DNA
30  */
31
32 #ifndef __DNA_MATERIAL_TYPES_H__
33 #define __DNA_MATERIAL_TYPES_H__
34
35 #include "DNA_defs.h"
36 #include "DNA_ID.h"
37 #include "DNA_listBase.h"
38
39 #ifndef MAX_MTEX
40 #define MAX_MTEX        18
41 #endif
42
43 struct Image;
44 struct bNodeTree;
45 struct AnimData;
46 struct Ipo;
47
48 /* WATCH IT: change type? also make changes in ipo.h  */
49
50 typedef struct TexPaintSlot {
51         struct Image *ima; /* image to be painted on */
52         char *uvname;      /* customdata index for uv layer, MAX_NAME*/
53         int valid;         /* do we have a valid image and UV map */
54         int pad;
55 } TexPaintSlot;
56
57 typedef struct MaterialGPencilStyle {
58         struct Image *sima;      /* Texture image for strokes */
59         struct Image *ima;       /* Texture image for filling */
60         float stroke_rgba[4];    /* color for paint and strokes (alpha included) */
61         float fill_rgba[4];      /* color that should be used for drawing "fills" for strokes (alpha included) */
62         float mix_rgba[4];       /* secondary color used for gradients and other stuff */
63         short flag;              /* settings */
64         short index;             /* custom index for passes */
65         short stroke_style;      /* style for drawing strokes (used to select shader type) */
66         short fill_style;        /* style for filling areas (used to select shader type) */
67         float mix_factor;        /* factor used to define shader behavior (several uses) */
68         float gradient_angle;    /* angle used for gradients orientation */
69         float gradient_radius;   /* radius for radial gradients */
70         float pattern_gridsize;  /* cheesboard size */
71         float gradient_scale[2]; /* uv coordinates scale */
72         float gradient_shift[2]; /* factor to shift filling in 2d space */
73         float texture_angle;     /* angle used for texture orientation */
74         float texture_scale[2];  /* texture scale (separated of uv scale) */
75         float texture_offset[2]; /* factor to shift texture in 2d space */
76         float texture_opacity;   /* texture opacity */
77         float texture_pixsize;   /* pixel size for uv along the stroke */
78         int mode;                /* drawing mode (line or dots) */
79
80         int gradient_type;       /* type of gradient */
81         char pad[4];
82 } MaterialGPencilStyle;
83
84 /* MaterialGPencilStyle->flag */
85 typedef enum eMaterialGPencilStyle_Flag {
86         /* Fill Texture is a pattern */
87         GP_STYLE_FILL_PATTERN = (1 << 0),
88         /* don't display color */
89         GP_STYLE_COLOR_HIDE = (1 << 1),
90         /* protected from further editing */
91         GP_STYLE_COLOR_LOCKED = (1 << 2),
92         /* do onion skinning */
93         GP_STYLE_COLOR_ONIONSKIN = (1 << 3),
94         /* clamp texture */
95         GP_STYLE_COLOR_TEX_CLAMP = (1 << 4),
96         /* mix texture */
97         GP_STYLE_COLOR_TEX_MIX = (1 << 5),
98         /* Flip fill colors */
99         GP_STYLE_COLOR_FLIP_FILL = (1 << 6),
100         /* Stroke Texture is a pattern */
101         GP_STYLE_STROKE_PATTERN = (1 << 7),
102         /* Stroke show main switch */
103         GP_STYLE_STROKE_SHOW = (1 << 8),
104         /* Fill  show main switch */
105         GP_STYLE_FILL_SHOW = (1 << 9)
106 } eMaterialGPencilStyle_Flag;
107
108 typedef enum eMaterialGPencilStyle_Mode {
109         GP_STYLE_MODE_LINE = 0, /* line */
110         GP_STYLE_MODE_DOTS = 1, /* dots */
111         GP_STYLE_MODE_BOX = 2, /* rectangles */
112 } eMaterialGPencilStyle_Mode;
113
114 typedef struct Material {
115         ID id;
116         struct AnimData *adt;   /* animation data (must be immediately after id for utilities to use it) */
117
118         short flag, pad1[7];
119
120         /* Colors from Blender Internal that we are still using. */
121         float r, g, b;
122         float specr, specg, specb;
123         float alpha DNA_DEPRECATED;
124         float ray_mirror  DNA_DEPRECATED;
125         float spec;
126         float gloss_mir  DNA_DEPRECATED; /* renamed and inversed to roughness */
127         float roughness;
128         float metallic;
129         float pad4[2];
130
131         /* Ror buttons and render. */
132         char pr_type, use_nodes;
133         short pr_lamp, pr_texture;
134
135         /* Index for render passes. */
136         short index;
137
138         struct bNodeTree *nodetree;
139         struct Ipo *ipo  DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
140         struct PreviewImage *preview;
141
142         /* Freestyle line settings. */
143         float line_col[4];
144         short line_priority;
145         short vcol_alpha;
146
147         /* Texture painting slots. */
148         short paint_active_slot;
149         short paint_clone_slot;
150         short tot_slots;
151         short pad2[3];
152
153         /* Transparency. */
154         float alpha_threshold;
155         float refract_depth;
156         char blend_method;
157         char blend_shadow;
158         char blend_flag;
159         char pad3[5];
160
161         /* Cached slots for texture painting, must be refreshed in
162          * refresh_texpaint_image_cache before using. */
163         struct TexPaintSlot *texpaintslot;
164
165         /* Runtime cache for GLSL materials. */
166         ListBase gpumaterial;
167
168         /* grease pencil color */
169         struct MaterialGPencilStyle *gp_style;
170 } Material;
171
172 /* **************** MATERIAL ********************* */
173
174 /* maximum number of materials per material array.
175  * (on object, mesh, lamp, etc.). limited by
176  * short mat_nr in verts, faces.
177  * -1 because for active material we store the index + 1 */
178 #define MAXMAT                  (32767-1)
179
180 /* flag */
181                 /* for render */
182 #define MA_IS_USED              1
183                 /* for dopesheet */
184 #define MA_DS_EXPAND    2
185                 /* for dopesheet (texture stack expander)
186                  * NOTE: this must have the same value as other texture stacks,
187                  * otherwise anim-editors will not read correctly
188                  */
189 #define MA_DS_SHOW_TEXS 4
190
191 /* ramps */
192 #define MA_RAMP_BLEND           0
193 #define MA_RAMP_ADD                     1
194 #define MA_RAMP_MULT            2
195 #define MA_RAMP_SUB                     3
196 #define MA_RAMP_SCREEN          4
197 #define MA_RAMP_DIV                     5
198 #define MA_RAMP_DIFF            6
199 #define MA_RAMP_DARK            7
200 #define MA_RAMP_LIGHT           8
201 #define MA_RAMP_OVERLAY         9
202 #define MA_RAMP_DODGE           10
203 #define MA_RAMP_BURN            11
204 #define MA_RAMP_HUE                     12
205 #define MA_RAMP_SAT                     13
206 #define MA_RAMP_VAL                     14
207 #define MA_RAMP_COLOR           15
208 #define MA_RAMP_SOFT        16
209 #define MA_RAMP_LINEAR      17
210
211 /* texco */
212 #define TEXCO_ORCO              1
213 #define TEXCO_REFL              2
214 #define TEXCO_NORM              4
215 #define TEXCO_GLOB              8
216 #define TEXCO_UV                16
217 #define TEXCO_OBJECT    32
218 #define TEXCO_LAVECTOR  64
219 #define TEXCO_VIEW              128
220 #define TEXCO_STICKY_   256  // DEPRECATED
221 #define TEXCO_OSA               512
222 #define TEXCO_WINDOW    1024
223 #define NEED_UV                 2048
224 #define TEXCO_TANGENT   4096
225         /* still stored in vertex->accum, 1 D */
226 #define TEXCO_STRAND    8192
227 #define TEXCO_PARTICLE  8192 /* strand is used for normal materials, particle for halo materials */
228 #define TEXCO_STRESS    16384
229 #define TEXCO_SPEED             32768
230
231 /* mapto */
232 #define MAP_COL                 1
233 #define MAP_ALPHA               128
234
235 /* pmapto */
236 /* init */
237 #define MAP_PA_INIT             31
238 #define MAP_PA_TIME             1
239 #define MAP_PA_LIFE             2
240 #define MAP_PA_DENS             4
241 #define MAP_PA_SIZE             8
242 #define MAP_PA_LENGTH   16
243 /* reset */
244 #define MAP_PA_IVEL             32
245 /* physics */
246 #define MAP_PA_PVEL             64
247 /* path cache */
248 #define MAP_PA_CACHE    912
249 #define MAP_PA_CLUMP    128
250 #define MAP_PA_KINK             256
251 #define MAP_PA_ROUGH    512
252 #define MAP_PA_FREQ             1024
253
254 /* pr_type */
255 #define MA_FLAT                 0
256 #define MA_SPHERE               1
257 #define MA_CUBE                 2
258 #define MA_MONKEY               3
259 #define MA_SPHERE_A             4
260 #define MA_TEXTURE              5
261 #define MA_LAMP                 6
262 #define MA_SKY                  7
263 #define MA_HAIR                 10
264 #define MA_ATMOS                11
265
266 /* blend_method */
267 enum {
268         MA_BM_SOLID,
269         MA_BM_ADD,
270         MA_BM_MULTIPLY,
271         MA_BM_CLIP,
272         MA_BM_HASHED,
273         MA_BM_BLEND,
274 };
275
276 /* blend_flag */
277 enum {
278         MA_BL_HIDE_BACKSIDE =        (1 << 0),
279         MA_BL_SS_REFRACTION =        (1 << 1),
280         MA_BL_SS_SUBSURFACE =        (1 << 2), /* DEPRECATED */
281         MA_BL_TRANSLUCENCY =         (1 << 3),
282 };
283
284 /* blend_shadow */
285 enum {
286         MA_BS_NONE = 0,
287         MA_BS_SOLID,
288         MA_BS_CLIP,
289         MA_BS_HASHED,
290 };
291
292 /* Grease Pencil Stroke styles */
293 enum {
294         GP_STYLE_STROKE_STYLE_SOLID = 0,
295         GP_STYLE_STROKE_STYLE_TEXTURE
296 };
297
298 /* Grease Pencil Fill styles */
299 enum {
300         GP_STYLE_FILL_STYLE_SOLID = 0,
301         GP_STYLE_FILL_STYLE_GRADIENT,
302         GP_STYLE_FILL_STYLE_CHESSBOARD,
303         GP_STYLE_FILL_STYLE_TEXTURE
304 };
305
306 /* Grease Pencil Gradient Types */
307 enum {
308         GP_STYLE_GRADIENT_LINEAR = 0,
309         GP_STYLE_GRADIENT_RADIAL
310 };
311
312 #endif