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