Merge branch 'master' into blende2.8
[blender.git] / source / blender / makesdna / DNA_texture_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_texture_types.h
29  *  \ingroup DNA
30  *  \since mar-2001
31  *  \author nzc
32  */
33
34 #ifndef __DNA_TEXTURE_TYPES_H__
35 #define __DNA_TEXTURE_TYPES_H__
36
37 #include "DNA_defs.h"
38 #include "DNA_ID.h"
39 #include "DNA_image_types.h" /* ImageUser */
40
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44
45 struct AnimData;
46 struct Ipo;
47 struct ColorBand;
48 struct Object;
49 struct Tex;
50 struct Image;
51 struct PreviewImage;
52 struct ImBuf;
53 struct CurveMapping;
54
55 typedef struct MTex {
56
57         short texco, mapto, maptoneg, blendtype;
58         struct Object *object;
59         struct Tex *tex;
60         char uvname[64];        /* MAX_CUSTOMDATA_LAYER_NAME */
61
62         char projx, projy, projz, mapping;
63         char brush_map_mode, brush_angle_mode;
64         char pad[2];
65         float ofs[3], size[3], rot, random_angle;
66
67         short texflag, colormodel, pmapto, pmaptoneg;
68         short normapspace, which_output;
69         float r, g, b, k;
70         float def_var, rt;
71
72         /* common */
73         float colfac, varfac;
74
75         /* material */
76         float norfac, dispfac, warpfac;
77         float colspecfac, mirrfac, alphafac;
78         float difffac, specfac, emitfac, hardfac;
79         float raymirrfac, translfac, ambfac;
80         float colemitfac, colreflfac, coltransfac;
81         float densfac, scatterfac, reflfac;
82
83         /* particles */
84         float timefac, lengthfac, clumpfac, dampfac;
85         float kinkfac, kinkampfac, roughfac, padensfac, gravityfac;
86         float lifefac, sizefac, ivelfac, fieldfac;
87         float twistfac;
88
89         /* lamp */
90         float shadowfac;
91
92         /* world */
93         float zenupfac, zendownfac, blendfac;
94 } MTex;
95
96 #ifndef DNA_USHORT_FIX
97 #define DNA_USHORT_FIX
98 /**
99  * \deprecated This typedef serves to avoid badly typed functions when
100  * \deprecated compiling while delivering a proper dna.c. Do not use
101  * \deprecated it in any case.
102  */
103 typedef unsigned short dna_ushort_fix;
104 #endif
105
106 typedef struct CBData {
107         float r, g, b, a, pos;
108         int cur;
109 } CBData;
110
111 /* 32 = MAXCOLORBAND */
112 /* note that this has to remain a single struct, for UserDef */
113 typedef struct ColorBand {
114         short tot, cur;
115         char ipotype, ipotype_hue;
116         char color_mode;
117         char pad[1];
118
119         CBData data[32];
120 } ColorBand;
121
122 typedef struct PointDensity {
123         short flag;
124
125         short falloff_type;
126         float falloff_softness;
127         float radius;
128         short source;
129         short pad0;
130
131         short color_source; /* psys_color_source */
132         short ob_color_source;
133
134         int totpoints;
135
136         struct Object *object;  /* for 'Object' or 'Particle system' type - source object */
137         int psys;                               /* index+1 in ob.particlesystem, non-ID pointer not allowed */
138         short psys_cache_space;         /* cache points in worldspace, object space, ... ? */
139         short ob_cache_space;           /* cache points in worldspace, object space, ... ? */
140         char vertex_attribute_name[64]; /* vertex attribute layer for color source, MAX_CUSTOMDATA_LAYER_NAME */
141
142         void *point_tree;               /* the acceleration tree containing points */
143         float *point_data;              /* dynamically allocated extra for extra information, like particle age */
144
145         float noise_size;
146         short noise_depth;
147         short noise_influence;
148         short noise_basis;
149         short pad1[3];
150         float noise_fac;
151
152         float speed_scale, falloff_speed_scale, pad2;
153         struct ColorBand *coba; /* for time -> color */
154
155         struct CurveMapping *falloff_curve; /* falloff density curve */
156 } PointDensity;
157
158 typedef struct Tex {
159         ID id;
160         struct AnimData *adt;   /* animation data (must be immediately after id for utilities to use it) */
161
162         float noisesize, turbul;
163         float bright, contrast, saturation, rfac, gfac, bfac;
164         float filtersize, pad2;
165
166         /* newnoise: musgrave parameters */
167         float mg_H, mg_lacunarity, mg_octaves, mg_offset, mg_gain;
168
169         /* newnoise: distorted noise amount, musgrave & voronoi output scale */
170         float dist_amount, ns_outscale;
171
172         /* newnoise: voronoi nearest neighbor weights, minkovsky exponent, distance metric & color type */
173         float vn_w1;
174         float vn_w2;
175         float vn_w3;
176         float vn_w4;
177         float vn_mexp;
178         short vn_distm, vn_coltype;
179
180         short noisedepth, noisetype; /* noisedepth MUST be <= 30 else we get floating point exceptions */
181
182         /* newnoise: noisebasis type for clouds/marble/etc, noisebasis2 only used for distorted noise */
183         short noisebasis, noisebasis2;
184
185         short imaflag, flag;
186         short type, stype;
187
188         float cropxmin, cropymin, cropxmax, cropymax;
189         int texfilter;
190         int afmax;      // anisotropic filter maximum value, ewa -> max eccentricity, feline -> max probes
191         short xrepeat, yrepeat;
192         short extend;
193
194         /* variables disabled, moved to struct iuser */
195         short _pad0;
196         int len;
197         int frames, offset, sfra;
198
199         float checkerdist, nabla;
200         float pad1;
201
202         struct ImageUser iuser;
203
204         struct bNodeTree *nodetree;
205         struct Ipo *ipo  DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
206         struct Image *ima;
207         struct ColorBand *coba;
208         struct PreviewImage *preview;
209
210         char use_nodes;
211         char pad[7];
212
213 } Tex;
214
215 /* used for mapping and texture nodes. note: rot is now in radians */
216
217 typedef struct TexMapping {
218         float loc[3], rot[3], size[3];
219         int flag;
220         char projx, projy, projz, mapping;
221         int type;
222
223         float mat[4][4];
224         float min[3], max[3];
225         struct Object *ob;
226
227 } TexMapping;
228
229 typedef struct ColorMapping {
230         struct ColorBand coba;
231
232         float bright, contrast, saturation;
233         int flag;
234
235         float blend_color[3];
236         float blend_factor;
237         int blend_type, pad[3];
238 } ColorMapping;
239
240 /* texmap->flag */
241 #define TEXMAP_CLIP_MIN         1
242 #define TEXMAP_CLIP_MAX         2
243 #define TEXMAP_UNIT_MATRIX      4
244
245 /* texmap->type */
246 #define TEXMAP_TYPE_POINT               0
247 #define TEXMAP_TYPE_TEXTURE             1
248 #define TEXMAP_TYPE_VECTOR              2
249 #define TEXMAP_TYPE_NORMAL              3
250
251 /* colormap->flag */
252 #define COLORMAP_USE_RAMP 1
253
254 /* **************** TEX ********************* */
255
256 /* type */
257 #define TEX_CLOUDS              1
258 #define TEX_WOOD                2
259 #define TEX_MARBLE              3
260 #define TEX_MAGIC               4
261 #define TEX_BLEND               5
262 #define TEX_STUCCI              6
263 #define TEX_NOISE               7
264 #define TEX_IMAGE               8
265 //#define TEX_PLUGIN            9 /* Deprecated */
266 //#define TEX_ENVMAP            10 /* Deprecated */
267 #define TEX_MUSGRAVE    11
268 #define TEX_VORONOI             12
269 #define TEX_DISTNOISE   13
270 //#define TEX_POINTDENSITY      14 /* Deprecated */
271 //#define TEX_VOXELDATA         15 /* Deprecated */
272 //#define TEX_OCEAN                     16 /* Deprecated */
273
274 /* musgrave stype */
275 #define TEX_MFRACTAL            0
276 #define TEX_RIDGEDMF            1
277 #define TEX_HYBRIDMF            2
278 #define TEX_FBM                         3
279 #define TEX_HTERRAIN            4
280
281 /* newnoise: noisebasis 1 & 2 */
282 #define TEX_BLENDER                     0
283 #define TEX_STDPERLIN           1
284 #define TEX_NEWPERLIN           2
285 #define TEX_VORONOI_F1          3
286 #define TEX_VORONOI_F2          4
287 #define TEX_VORONOI_F3          5
288 #define TEX_VORONOI_F4          6
289 #define TEX_VORONOI_F2F1        7
290 #define TEX_VORONOI_CRACKLE             8
291 #define TEX_CELLNOISE           14
292
293 /* newnoise: Voronoi distance metrics, vn_distm */
294 #define TEX_DISTANCE            0
295 #define TEX_DISTANCE_SQUARED            1
296 #define TEX_MANHATTAN           2
297 #define TEX_CHEBYCHEV           3
298 #define TEX_MINKOVSKY_HALF              4
299 #define TEX_MINKOVSKY_FOUR              5
300 #define TEX_MINKOVSKY           6
301
302 /* imaflag */
303 #define TEX_INTERPOL    (1 << 0)
304 #define TEX_USEALPHA    (1 << 1)
305 #define TEX_MIPMAP              (1 << 2)
306 #define TEX_IMAROT              (1 << 4)
307 #define TEX_CALCALPHA   (1 << 5)
308 #define TEX_NORMALMAP   (1 << 11)
309 #define TEX_GAUSS_MIP   (1 << 12)
310 #define TEX_FILTER_MIN  (1 << 13)
311 #define TEX_DERIVATIVEMAP       (1 << 14)
312
313 /* texfilter */
314 // TXF_BOX -> blender's old texture filtering method
315 #define TXF_BOX                 0
316 #define TXF_EWA                 1
317 #define TXF_FELINE              2
318 #define TXF_AREA                3
319
320 /* imaflag unused, only for version check */
321 #ifdef DNA_DEPRECATED_ALLOW
322 // #define TEX_FIELDS_      (1 << 3)
323 #define TEX_ANIMCYCLIC_     (1 << 6)
324 #define TEX_ANIM5_          (1 << 7)
325 #define TEX_ANTIALI_        (1 << 8)
326 #define TEX_ANTISCALE_      (1 << 9)
327 #define TEX_STD_FIELD_      (1 << 10)
328 #endif
329
330 /* flag */
331 #define TEX_COLORBAND       (1 << 0)
332 #define TEX_FLIPBLEND       (1 << 1)
333 #define TEX_NEGALPHA        (1 << 2)
334 #define TEX_CHECKER_ODD     (1 << 3)
335 #define TEX_CHECKER_EVEN    (1 << 4)
336 #define TEX_PRV_ALPHA       (1 << 5)
337 #define TEX_PRV_NOR         (1 << 6)
338 #define TEX_REPEAT_XMIR     (1 << 7)
339 #define TEX_REPEAT_YMIR     (1 << 8)
340 #define TEX_FLAG_MASK       (TEX_COLORBAND | TEX_FLIPBLEND | TEX_NEGALPHA | TEX_CHECKER_ODD | TEX_CHECKER_EVEN | TEX_PRV_ALPHA | TEX_PRV_NOR | TEX_REPEAT_XMIR | TEX_REPEAT_YMIR)
341 #define TEX_DS_EXPAND       (1 << 9)
342 #define TEX_NO_CLAMP        (1 << 10)
343
344 /* extend (starts with 1 because of backward comp.) */
345 #define TEX_EXTEND              1
346 #define TEX_CLIP                2
347 #define TEX_REPEAT              3
348 #define TEX_CLIPCUBE    4
349 #define TEX_CHECKER             5
350
351 /* noisetype */
352 #define TEX_NOISESOFT   0
353 #define TEX_NOISEPERL   1
354
355 /* tex->noisebasis2 in texture.c - wood waveforms */
356 #define TEX_SIN                 0
357 #define TEX_SAW                 1
358 #define TEX_TRI                 2
359
360 /* tex->stype in texture.c - wood types */
361 #define TEX_BAND                0
362 #define TEX_RING                1
363 #define TEX_BANDNOISE   2
364 #define TEX_RINGNOISE   3
365
366 /* tex->stype in texture.c - cloud types */
367 #define TEX_DEFAULT             0
368 #define TEX_COLOR               1
369
370 /* tex->stype in texture.c - marble types */
371 #define TEX_SOFT                0
372 #define TEX_SHARP               1
373 #define TEX_SHARPER             2
374
375 /* tex->stype in texture.c - blend types */
376 #define TEX_LIN                 0
377 #define TEX_QUAD                1
378 #define TEX_EASE                2
379 #define TEX_DIAG                3
380 #define TEX_SPHERE              4
381 #define TEX_HALO                5
382 #define TEX_RAD                 6
383
384 /* tex->stype in texture.c - stucci types */
385 #define TEX_PLASTIC             0
386 #define TEX_WALLIN              1
387 #define TEX_WALLOUT             2
388
389 /* tex->stype in texture.c - voronoi types */
390 #define TEX_INTENSITY   0
391 #define TEX_COL1                1
392 #define TEX_COL2                2
393 #define TEX_COL3                3
394
395 /* mtex->normapspace */
396 #define MTEX_NSPACE_CAMERA      0
397 #define MTEX_NSPACE_WORLD       1
398 #define MTEX_NSPACE_OBJECT      2
399 #define MTEX_NSPACE_TANGENT     3
400
401 /* wrap */
402 #define MTEX_FLAT               0
403 #define MTEX_CUBE               1
404 #define MTEX_TUBE               2
405 #define MTEX_SPHERE             3
406
407 /* return value */
408 #define TEX_INT         0
409 #define TEX_RGB         1
410 #define TEX_NOR         2
411
412 /* pr_texture in material, world, lamp, */
413 #define TEX_PR_TEXTURE  0
414 #define TEX_PR_OTHER    1
415 #define TEX_PR_BOTH             2
416
417 /* **************** MTEX ********************* */
418
419 /* proj */
420 #define PROJ_N                  0
421 #define PROJ_X                  1
422 #define PROJ_Y                  2
423 #define PROJ_Z                  3
424
425 /* texflag */
426 #define MTEX_RGBTOINT           (1 << 0)
427 #define MTEX_STENCIL            (1 << 1)
428 #define MTEX_NEGATIVE           (1 << 2)
429 #define MTEX_ALPHAMIX           (1 << 3)
430 #define MTEX_VIEWSPACE          (1 << 4)
431 #define MTEX_DUPLI_MAPTO        (1 << 5)
432 #define MTEX_OB_DUPLI_ORIG      (1 << 6)
433 #define MTEX_COMPAT_BUMP        (1 << 7)
434 #define MTEX_3TAP_BUMP          (1 << 8)
435 #define MTEX_5TAP_BUMP          (1 << 9)
436 #define MTEX_BUMP_OBJECTSPACE   (1 << 10)
437 #define MTEX_BUMP_TEXTURESPACE  (1 << 11)
438 /* #define MTEX_BUMP_FLIPPED    (1 << 12) */ /* UNUSED */
439 #define MTEX_TIPS                               (1 << 12)  /* should use with_freestyle flag?  */
440 #define MTEX_BICUBIC_BUMP               (1 << 13)
441 #define MTEX_MAPTO_BOUNDS               (1 << 14)
442
443 /* blendtype */
444 #define MTEX_BLEND              0
445 #define MTEX_MUL                1
446 #define MTEX_ADD                2
447 #define MTEX_SUB                3
448 #define MTEX_DIV                4
449 #define MTEX_DARK               5
450 #define MTEX_DIFF               6
451 #define MTEX_LIGHT              7
452 #define MTEX_SCREEN             8
453 #define MTEX_OVERLAY    9
454 #define MTEX_BLEND_HUE          10
455 #define MTEX_BLEND_SAT          11
456 #define MTEX_BLEND_VAL          12
457 #define MTEX_BLEND_COLOR        13
458 #define MTEX_SOFT_LIGHT     15
459 #define MTEX_LIN_LIGHT      16
460
461 /* brush_map_mode */
462 #define MTEX_MAP_MODE_VIEW     0
463 #define MTEX_MAP_MODE_TILED    1
464 #define MTEX_MAP_MODE_3D       2
465 #define MTEX_MAP_MODE_AREA     3
466 #define MTEX_MAP_MODE_RANDOM   4
467 #define MTEX_MAP_MODE_STENCIL  5
468
469 /* brush_angle_mode */
470 #define MTEX_ANGLE_RANDOM      1
471 #define MTEX_ANGLE_RAKE        2
472
473 /* **************** ColorBand ********************* */
474
475 /* colormode */
476 enum {
477         COLBAND_BLEND_RGB   = 0,
478         COLBAND_BLEND_HSV   = 1,
479         COLBAND_BLEND_HSL   = 2,
480 };
481
482 /* interpolation */
483 enum {
484         COLBAND_INTERP_LINEAR       = 0,
485         COLBAND_INTERP_EASE         = 1,
486         COLBAND_INTERP_B_SPLINE     = 2,
487         COLBAND_INTERP_CARDINAL     = 3,
488         COLBAND_INTERP_CONSTANT     = 4,
489 };
490
491 /* color interpolation */
492 enum {
493         COLBAND_HUE_NEAR    = 0,
494         COLBAND_HUE_FAR     = 1,
495         COLBAND_HUE_CW      = 2,
496         COLBAND_HUE_CCW     = 3,
497 };
498
499 /* **************** PointDensity ********************* */
500
501 /* source */
502 #define TEX_PD_PSYS                     0
503 #define TEX_PD_OBJECT           1
504 #define TEX_PD_FILE                     2
505
506 /* falloff_type */
507 #define TEX_PD_FALLOFF_STD              0
508 #define TEX_PD_FALLOFF_SMOOTH   1
509 #define TEX_PD_FALLOFF_SOFT             2
510 #define TEX_PD_FALLOFF_CONSTANT 3
511 #define TEX_PD_FALLOFF_ROOT             4
512 #define TEX_PD_FALLOFF_PARTICLE_AGE 5
513 #define TEX_PD_FALLOFF_PARTICLE_VEL 6
514
515 /* psys_cache_space */
516 #define TEX_PD_OBJECTLOC        0
517 #define TEX_PD_OBJECTSPACE      1
518 #define TEX_PD_WORLDSPACE       2
519
520 /* flag */
521 #define TEX_PD_TURBULENCE               1
522 #define TEX_PD_FALLOFF_CURVE    2
523
524 /* noise_influence */
525 #define TEX_PD_NOISE_STATIC             0
526 /* #define TEX_PD_NOISE_VEL             1 */ /* Deprecated */
527 /* #define TEX_PD_NOISE_AGE             2 */ /* Deprecated */
528 /* #define TEX_PD_NOISE_TIME    3 */ /* Deprecated */
529
530 /* color_source */
531 enum {
532         TEX_PD_COLOR_CONSTANT   = 0,
533         /* color_source: particles */
534         TEX_PD_COLOR_PARTAGE    = 1,
535         TEX_PD_COLOR_PARTSPEED  = 2,
536         TEX_PD_COLOR_PARTVEL    = 3,
537         /* color_source: vertices */
538         TEX_PD_COLOR_VERTCOL    = 1,
539         TEX_PD_COLOR_VERTWEIGHT = 2,
540         TEX_PD_COLOR_VERTNOR    = 3,
541 };
542
543 #define POINT_DATA_VEL          1
544 #define POINT_DATA_LIFE         2
545 #define POINT_DATA_COLOR        4
546
547 #ifdef __cplusplus
548 }
549 #endif
550
551 #endif