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