GPencil: Add "Self Overlap" parameter to materials to disable Stencil
[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
100   /** Factor used to mix texture and stroke color. */
101   float mix_stroke_factor;
102   /** Mode used to align Dots and Boxes with stroke drawing path and object rotation */
103   int alignment_mode;
104   char _pad[4];
105 } MaterialGPencilStyle;
106
107 /* MaterialGPencilStyle->flag */
108 typedef enum eMaterialGPencilStyle_Flag {
109   /* Fill Texture is a pattern */
110   GP_STYLE_FILL_PATTERN = (1 << 0),
111   /* don't display color */
112   GP_STYLE_COLOR_HIDE = (1 << 1),
113   /* protected from further editing */
114   GP_STYLE_COLOR_LOCKED = (1 << 2),
115   /* do onion skinning */
116   GP_STYLE_COLOR_ONIONSKIN = (1 << 3),
117   /* clamp texture */
118   GP_STYLE_COLOR_TEX_CLAMP = (1 << 4),
119   /* mix fill texture */
120   GP_STYLE_FILL_TEX_MIX = (1 << 5),
121   /* Flip fill colors */
122   GP_STYLE_COLOR_FLIP_FILL = (1 << 6),
123   /* Stroke Texture is a pattern */
124   GP_STYLE_STROKE_PATTERN = (1 << 7),
125   /* Stroke show main switch */
126   GP_STYLE_STROKE_SHOW = (1 << 8),
127   /* Fill  show main switch */
128   GP_STYLE_FILL_SHOW = (1 << 9),
129   /* mix stroke texture */
130   GP_STYLE_STROKE_TEX_MIX = (1 << 11),
131   /* disable stencil clipping (overlap) */
132   GP_STYLE_DISABLE_STENCIL = (1 << 12),
133 } eMaterialGPencilStyle_Flag;
134
135 typedef enum eMaterialGPencilStyle_Mode {
136   GP_STYLE_MODE_LINE = 0, /* line */
137   GP_STYLE_MODE_DOTS = 1, /* dots */
138   GP_STYLE_MODE_BOX = 2,  /* rectangles */
139 } eMaterialGPencilStyle_Mode;
140
141 typedef struct Material {
142   ID id;
143   /** Animation data (must be immediately after id for utilities to use it). */
144   struct AnimData *adt;
145
146   short flag;
147   char _pad1[2];
148
149   /* Colors from Blender Internal that we are still using. */
150   float r, g, b, a;
151   float specr, specg, specb;
152   float alpha DNA_DEPRECATED;
153   float ray_mirror DNA_DEPRECATED;
154   float spec;
155   /** Renamed and inversed to roughness. */
156   float gloss_mir DNA_DEPRECATED;
157   float roughness;
158   float metallic;
159
160   /** Nodes */
161   char use_nodes;
162
163   /** Preview render. */
164   char pr_type;
165   short pr_texture;
166   short pr_flag;
167
168   /** Index for render passes. */
169   short index;
170
171   struct bNodeTree *nodetree;
172   /** Old animation system, deprecated for 2.5. */
173   struct Ipo *ipo DNA_DEPRECATED;
174   struct PreviewImage *preview;
175
176   /* Freestyle line settings. */
177   float line_col[4];
178   short line_priority;
179   short vcol_alpha;
180
181   /* Texture painting slots. */
182   short paint_active_slot;
183   short paint_clone_slot;
184   short tot_slots;
185   char _pad2[2];
186
187   /* Transparency. */
188   float alpha_threshold;
189   float refract_depth;
190   char blend_method;
191   char blend_shadow;
192   char blend_flag;
193   char _pad3[1];
194
195   /**
196    * Cached slots for texture painting, must be refreshed in
197    * refresh_texpaint_image_cache before using.
198    */
199   struct TexPaintSlot *texpaintslot;
200
201   /** Runtime cache for GLSL materials. */
202   ListBase gpumaterial;
203
204   /** Grease pencil color. */
205   struct MaterialGPencilStyle *gp_style;
206 } Material;
207
208 /* **************** MATERIAL ********************* */
209
210 /* maximum number of materials per material array.
211  * (on object, mesh, light, etc.). limited by
212  * short mat_nr in verts, faces.
213  * -1 because for active material we store the index + 1 */
214 #define MAXMAT (32767 - 1)
215
216 /* flag */
217 /* for render */
218 /* #define MA_IS_USED      (1 << 0) */ /* UNUSED */
219                                        /* for dopesheet */
220 #define MA_DS_EXPAND (1 << 1)
221 /* for dopesheet (texture stack expander)
222  * NOTE: this must have the same value as other texture stacks,
223  * otherwise anim-editors will not read correctly
224  */
225 #define MA_DS_SHOW_TEXS (1 << 2)
226
227 /* ramps */
228 #define MA_RAMP_BLEND 0
229 #define MA_RAMP_ADD 1
230 #define MA_RAMP_MULT 2
231 #define MA_RAMP_SUB 3
232 #define MA_RAMP_SCREEN 4
233 #define MA_RAMP_DIV 5
234 #define MA_RAMP_DIFF 6
235 #define MA_RAMP_DARK 7
236 #define MA_RAMP_LIGHT 8
237 #define MA_RAMP_OVERLAY 9
238 #define MA_RAMP_DODGE 10
239 #define MA_RAMP_BURN 11
240 #define MA_RAMP_HUE 12
241 #define MA_RAMP_SAT 13
242 #define MA_RAMP_VAL 14
243 #define MA_RAMP_COLOR 15
244 #define MA_RAMP_SOFT 16
245 #define MA_RAMP_LINEAR 17
246
247 /* texco */
248 #define TEXCO_ORCO (1 << 0)
249 /* #define TEXCO_REFL      (1 << 1) */ /* deprecated */
250 /* #define TEXCO_NORM      (1 << 2) */ /* deprecated */
251 #define TEXCO_GLOB (1 << 3)
252 #define TEXCO_UV (1 << 4)
253 #define TEXCO_OBJECT (1 << 5)
254 /* #define TEXCO_LAVECTOR  (1 << 6) */ /* deprecated */
255 /* #define TEXCO_VIEW      (1 << 7) */ /* deprecated */
256 /* #define TEXCO_STICKY   (1 << 8) */  /* deprecated */
257 /* #define TEXCO_OSA       (1 << 9) */ /* deprecated */
258 #define TEXCO_WINDOW (1 << 10)
259 /* #define NEED_UV         (1 << 11) */ /* deprecated */
260 /* #define TEXCO_TANGENT   (1 << 12) */ /* deprecated */
261 /* still stored in vertex->accum, 1 D */
262 #define TEXCO_STRAND (1 << 13)
263 /** strand is used for normal materials, particle for halo materials */
264 #define TEXCO_PARTICLE (1 << 13)
265 /* #define TEXCO_STRESS    (1 << 14) */ /* deprecated */
266 /* #define TEXCO_SPEED     (1 << 15) */ /* deprecated */
267
268 /* mapto */
269 #define MAP_COL (1 << 0)
270 #define MAP_ALPHA (1 << 7)
271
272 /* pmapto */
273 /* init */
274 #define MAP_PA_INIT ((1 << 5) - 1)
275 #define MAP_PA_TIME (1 << 0)
276 #define MAP_PA_LIFE (1 << 1)
277 #define MAP_PA_DENS (1 << 2)
278 #define MAP_PA_SIZE (1 << 3)
279 #define MAP_PA_LENGTH (1 << 4)
280 /* reset */
281 #define MAP_PA_IVEL (1 << 5)
282 /* physics */
283 #define MAP_PA_PVEL (1 << 6)
284 /* path cache */
285 #define MAP_PA_CLUMP (1 << 7)
286 #define MAP_PA_KINK (1 << 8)
287 #define MAP_PA_ROUGH (1 << 9)
288 #define MAP_PA_FREQ (1 << 10)
289
290 /* pr_type */
291 #define MA_FLAT 0
292 #define MA_SPHERE 1
293 #define MA_CUBE 2
294 #define MA_SHADERBALL 3
295 #define MA_SPHERE_A 4 /* Used for icon renders only. */
296 #define MA_TEXTURE 5
297 #define MA_LAMP 6
298 #define MA_SKY 7
299 #define MA_HAIR 10
300 #define MA_ATMOS 11
301 #define MA_CLOTH 12
302 #define MA_FLUID 13
303
304 /* pr_flag */
305 #define MA_PREVIEW_WORLD (1 << 0)
306
307 /* blend_method */
308 enum {
309   MA_BM_SOLID,
310   MA_BM_ADD,
311   MA_BM_MULTIPLY,
312   MA_BM_CLIP,
313   MA_BM_HASHED,
314   MA_BM_BLEND,
315 };
316
317 /* blend_flag */
318 enum {
319   MA_BL_HIDE_BACKFACE = (1 << 0),
320   MA_BL_SS_REFRACTION = (1 << 1),
321   MA_BL_CULL_BACKFACE = (1 << 2),
322   MA_BL_TRANSLUCENCY = (1 << 3),
323 };
324
325 /* blend_shadow */
326 enum {
327   MA_BS_NONE = 0,
328   MA_BS_SOLID,
329   MA_BS_CLIP,
330   MA_BS_HASHED,
331 };
332
333 /* Grease Pencil Stroke styles */
334 enum {
335   GP_STYLE_STROKE_STYLE_SOLID = 0,
336   GP_STYLE_STROKE_STYLE_TEXTURE,
337 };
338
339 /* Grease Pencil Fill styles */
340 enum {
341   GP_STYLE_FILL_STYLE_SOLID = 0,
342   GP_STYLE_FILL_STYLE_GRADIENT,
343   GP_STYLE_FILL_STYLE_CHECKER,
344   GP_STYLE_FILL_STYLE_TEXTURE,
345 };
346
347 /* Grease Pencil Gradient Types */
348 enum {
349   GP_STYLE_GRADIENT_LINEAR = 0,
350   GP_STYLE_GRADIENT_RADIAL,
351 };
352
353 /* Grease Pencil Follow Drawing Modes */
354 enum {
355   GP_STYLE_FOLLOW_PATH = 0,
356   GP_STYLE_FOLLOW_OBJ,
357   GP_STYLE_FOLLOW_FIXED,
358 };
359 #endif