Merge branch 'master' into blende2.8
[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 << 0)
183                 /* for dopesheet */
184 #define MA_DS_EXPAND    (1 << 1)
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 (1 << 2)
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 << 0)
213 #define TEXCO_REFL      (1 << 1)
214 #define TEXCO_NORM      (1 << 2)
215 #define TEXCO_GLOB      (1 << 3)
216 #define TEXCO_UV        (1 << 4)
217 #define TEXCO_OBJECT    (1 << 5)
218 #define TEXCO_LAVECTOR  (1 << 6)
219 #define TEXCO_VIEW      (1 << 7)
220 #define TEXCO_STICKY_   (1 << 8)  // DEPRECATED
221 #define TEXCO_OSA       (1 << 9)
222 #define TEXCO_WINDOW    (1 << 10)
223 #define NEED_UV         (1 << 11)
224 #define TEXCO_TANGENT   (1 << 12)
225         /* still stored in vertex->accum, 1 D */
226 #define TEXCO_STRAND    (1 << 13)
227 #define TEXCO_PARTICLE  (1 << 13) /* strand is used for normal materials, particle for halo materials */
228 #define TEXCO_STRESS    (1 << 14)
229 #define TEXCO_SPEED     (1 << 15)
230
231 /* mapto */
232 #define MAP_COL                 (1 << 0)
233 #define MAP_ALPHA               (1 << 7)
234
235 /* pmapto */
236 /* init */
237 #define MAP_PA_INIT     ((1 << 5) - 1)
238 #define MAP_PA_TIME     (1 << 0)
239 #define MAP_PA_LIFE     (1 << 1)
240 #define MAP_PA_DENS     (1 << 2)
241 #define MAP_PA_SIZE     (1 << 3)
242 #define MAP_PA_LENGTH   (1 << 4)
243 /* reset */
244 #define MAP_PA_IVEL     (1 << 5)
245 /* physics */
246 #define MAP_PA_PVEL     (1 << 6)
247 /* path cache */
248 #define MAP_PA_CLUMP    (1 << 7)
249 #define MAP_PA_KINK     (1 << 8)
250 #define MAP_PA_ROUGH    (1 << 9)
251 #define MAP_PA_FREQ     (1 << 10)
252
253 /* pr_type */
254 #define MA_FLAT                 0
255 #define MA_SPHERE               1
256 #define MA_CUBE                 2
257 #define MA_MONKEY               3
258 #define MA_SPHERE_A             4
259 #define MA_TEXTURE              5
260 #define MA_LAMP                 6
261 #define MA_SKY                  7
262 #define MA_HAIR                 10
263 #define MA_ATMOS                11
264
265 /* blend_method */
266 enum {
267         MA_BM_SOLID,
268         MA_BM_ADD,
269         MA_BM_MULTIPLY,
270         MA_BM_CLIP,
271         MA_BM_HASHED,
272         MA_BM_BLEND,
273 };
274
275 /* blend_flag */
276 enum {
277         MA_BL_HIDE_BACKSIDE =        (1 << 0),
278         MA_BL_SS_REFRACTION =        (1 << 1),
279         MA_BL_SS_SUBSURFACE =        (1 << 2), /* DEPRECATED */
280         MA_BL_TRANSLUCENCY =         (1 << 3),
281 };
282
283 /* blend_shadow */
284 enum {
285         MA_BS_NONE = 0,
286         MA_BS_SOLID,
287         MA_BS_CLIP,
288         MA_BS_HASHED,
289 };
290
291 /* Grease Pencil Stroke styles */
292 enum {
293         GP_STYLE_STROKE_STYLE_SOLID = 0,
294         GP_STYLE_STROKE_STYLE_TEXTURE
295 };
296
297 /* Grease Pencil Fill styles */
298 enum {
299         GP_STYLE_FILL_STYLE_SOLID = 0,
300         GP_STYLE_FILL_STYLE_GRADIENT,
301         GP_STYLE_FILL_STYLE_CHESSBOARD,
302         GP_STYLE_FILL_STYLE_TEXTURE
303 };
304
305 /* Grease Pencil Gradient Types */
306 enum {
307         GP_STYLE_GRADIENT_LINEAR = 0,
308         GP_STYLE_GRADIENT_RADIAL
309 };
310
311 #endif