Cleanup: comment line length (DNA)
[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         float twistfac;
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,
222          * distance metric & color type */
223         float vn_w1;
224         float vn_w2;
225         float vn_w3;
226         float vn_w4;
227         float vn_mexp;
228         short vn_distm, vn_coltype;
229
230         short noisedepth, noisetype; /* noisedepth MUST be <= 30 else we get floating point exceptions */
231
232         /* newnoise: noisebasis type for clouds/marble/etc, noisebasis2 only used for distorted noise */
233         short noisebasis, noisebasis2;
234
235         short imaflag, flag;
236         short type, stype;
237
238         float cropxmin, cropymin, cropxmax, cropymax;
239         int texfilter;
240         int afmax;      // anisotropic filter maximum value, ewa -> max eccentricity, feline -> max probes
241         short xrepeat, yrepeat;
242         short extend;
243
244         /* variables disabled, moved to struct iuser */
245         short fie_ima;
246         int len;
247         int frames, offset, sfra;
248
249         float checkerdist, nabla;
250         float pad1;
251
252         struct ImageUser iuser;
253
254         struct bNodeTree *nodetree;
255         struct Ipo *ipo  DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
256         struct Image *ima;
257         struct ColorBand *coba;
258         struct EnvMap *env;
259         struct PreviewImage *preview;
260         struct PointDensity *pd;
261         struct VoxelData *vd;
262         struct OceanTex *ot;
263
264         char use_nodes;
265         char pad[7];
266
267 } Tex;
268
269 /* used for mapping and texture nodes. note: rot is now in radians */
270
271 typedef struct TexMapping {
272         float loc[3], rot[3], size[3];
273         int flag;
274         char projx, projy, projz, mapping;
275         int type;
276
277         float mat[4][4];
278         float min[3], max[3];
279         struct Object *ob;
280
281 } TexMapping;
282
283 typedef struct ColorMapping {
284         struct ColorBand coba;
285
286         float bright, contrast, saturation;
287         int flag;
288
289         float blend_color[3];
290         float blend_factor;
291         int blend_type, pad[3];
292 } ColorMapping;
293
294 /* texmap->flag */
295 #define TEXMAP_CLIP_MIN         1
296 #define TEXMAP_CLIP_MAX         2
297 #define TEXMAP_UNIT_MATRIX      4
298
299 /* texmap->type */
300 #define TEXMAP_TYPE_POINT               0
301 #define TEXMAP_TYPE_TEXTURE             1
302 #define TEXMAP_TYPE_VECTOR              2
303 #define TEXMAP_TYPE_NORMAL              3
304
305 /* colormap->flag */
306 #define COLORMAP_USE_RAMP 1
307
308 /* **************** TEX ********************* */
309
310 /* type */
311 #define TEX_CLOUDS              1
312 #define TEX_WOOD                2
313 #define TEX_MARBLE              3
314 #define TEX_MAGIC               4
315 #define TEX_BLEND               5
316 #define TEX_STUCCI              6
317 #define TEX_NOISE               7
318 #define TEX_IMAGE               8
319 //#define TEX_PLUGIN            9 /* Deprecated */
320 #define TEX_ENVMAP              10
321 #define TEX_MUSGRAVE    11
322 #define TEX_VORONOI             12
323 #define TEX_DISTNOISE   13
324 #define TEX_POINTDENSITY        14
325 #define TEX_VOXELDATA           15
326 #define TEX_OCEAN               16
327
328 /* musgrave stype */
329 #define TEX_MFRACTAL            0
330 #define TEX_RIDGEDMF            1
331 #define TEX_HYBRIDMF            2
332 #define TEX_FBM                         3
333 #define TEX_HTERRAIN            4
334
335 /* newnoise: noisebasis 1 & 2 */
336 #define TEX_BLENDER                     0
337 #define TEX_STDPERLIN           1
338 #define TEX_NEWPERLIN           2
339 #define TEX_VORONOI_F1          3
340 #define TEX_VORONOI_F2          4
341 #define TEX_VORONOI_F3          5
342 #define TEX_VORONOI_F4          6
343 #define TEX_VORONOI_F2F1        7
344 #define TEX_VORONOI_CRACKLE             8
345 #define TEX_CELLNOISE           14
346
347 /* newnoise: Voronoi distance metrics, vn_distm */
348 #define TEX_DISTANCE            0
349 #define TEX_DISTANCE_SQUARED            1
350 #define TEX_MANHATTAN           2
351 #define TEX_CHEBYCHEV           3
352 #define TEX_MINKOVSKY_HALF              4
353 #define TEX_MINKOVSKY_FOUR              5
354 #define TEX_MINKOVSKY           6
355
356 /* imaflag */
357 #define TEX_INTERPOL    (1 << 0)
358 #define TEX_USEALPHA    (1 << 1)
359 #define TEX_MIPMAP              (1 << 2)
360 #define TEX_IMAROT              (1 << 4)
361 #define TEX_CALCALPHA   (1 << 5)
362 #define TEX_NORMALMAP   (1 << 11)
363 #define TEX_GAUSS_MIP   (1 << 12)
364 #define TEX_FILTER_MIN  (1 << 13)
365 #define TEX_DERIVATIVEMAP       (1 << 14)
366
367 /* texfilter */
368 // TXF_BOX -> blender's old texture filtering method
369 #define TXF_BOX                 0
370 #define TXF_EWA                 1
371 #define TXF_FELINE              2
372 #define TXF_AREA                3
373
374 /* imaflag unused, only for version check */
375 #ifdef DNA_DEPRECATED_ALLOW
376 #define TEX_FIELDS_             (1 << 3)
377 #define TEX_ANIMCYCLIC_ (1 << 6)
378 #define TEX_ANIM5_              (1 << 7)
379 #define TEX_ANTIALI_    (1 << 8)
380 #define TEX_ANTISCALE_  (1 << 9)
381 #define TEX_STD_FIELD_  (1 << 10)
382 #endif
383
384 /* flag */
385 #define TEX_COLORBAND       (1 << 0)
386 #define TEX_FLIPBLEND       (1 << 1)
387 #define TEX_NEGALPHA        (1 << 2)
388 #define TEX_CHECKER_ODD     (1 << 3)
389 #define TEX_CHECKER_EVEN    (1 << 4)
390 #define TEX_PRV_ALPHA       (1 << 5)
391 #define TEX_PRV_NOR         (1 << 6)
392 #define TEX_REPEAT_XMIR     (1 << 7)
393 #define TEX_REPEAT_YMIR     (1 << 8)
394 #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)
395 #define TEX_DS_EXPAND       (1 << 9)
396 #define TEX_NO_CLAMP        (1 << 10)
397
398 /* extend (starts with 1 because of backward comp.) */
399 #define TEX_EXTEND              1
400 #define TEX_CLIP                2
401 #define TEX_REPEAT              3
402 #define TEX_CLIPCUBE    4
403 #define TEX_CHECKER             5
404
405 /* noisetype */
406 #define TEX_NOISESOFT   0
407 #define TEX_NOISEPERL   1
408
409 /* tex->noisebasis2 in texture.c - wood waveforms */
410 #define TEX_SIN                 0
411 #define TEX_SAW                 1
412 #define TEX_TRI                 2
413
414 /* tex->stype in texture.c - wood types */
415 #define TEX_BAND                0
416 #define TEX_RING                1
417 #define TEX_BANDNOISE   2
418 #define TEX_RINGNOISE   3
419
420 /* tex->stype in texture.c - cloud types */
421 #define TEX_DEFAULT             0
422 #define TEX_COLOR               1
423
424 /* tex->stype in texture.c - marble types */
425 #define TEX_SOFT                0
426 #define TEX_SHARP               1
427 #define TEX_SHARPER             2
428
429 /* tex->stype in texture.c - blend types */
430 #define TEX_LIN                 0
431 #define TEX_QUAD                1
432 #define TEX_EASE                2
433 #define TEX_DIAG                3
434 #define TEX_SPHERE              4
435 #define TEX_HALO                5
436 #define TEX_RAD                 6
437
438 /* tex->stype in texture.c - stucci types */
439 #define TEX_PLASTIC             0
440 #define TEX_WALLIN              1
441 #define TEX_WALLOUT             2
442
443 /* tex->stype in texture.c - voronoi types */
444 #define TEX_INTENSITY   0
445 #define TEX_COL1                1
446 #define TEX_COL2                2
447 #define TEX_COL3                3
448
449 /* mtex->normapspace */
450 #define MTEX_NSPACE_CAMERA      0
451 #define MTEX_NSPACE_WORLD       1
452 #define MTEX_NSPACE_OBJECT      2
453 #define MTEX_NSPACE_TANGENT     3
454
455 /* wrap */
456 #define MTEX_FLAT               0
457 #define MTEX_CUBE               1
458 #define MTEX_TUBE               2
459 #define MTEX_SPHERE             3
460
461 /* return value */
462 #define TEX_INT         0
463 #define TEX_RGB         1
464 #define TEX_NOR         2
465
466 /* pr_texture in material, world, lamp, */
467 #define TEX_PR_TEXTURE  0
468 #define TEX_PR_OTHER    1
469 #define TEX_PR_BOTH             2
470
471 /* **************** MTEX ********************* */
472
473 /* proj */
474 #define PROJ_N                  0
475 #define PROJ_X                  1
476 #define PROJ_Y                  2
477 #define PROJ_Z                  3
478
479 /* texflag */
480 #define MTEX_RGBTOINT           (1 << 0)
481 #define MTEX_STENCIL            (1 << 1)
482 #define MTEX_NEGATIVE           (1 << 2)
483 #define MTEX_ALPHAMIX           (1 << 3)
484 #define MTEX_VIEWSPACE          (1 << 4)
485 #define MTEX_DUPLI_MAPTO        (1 << 5)
486 #define MTEX_OB_DUPLI_ORIG      (1 << 6)
487 #define MTEX_COMPAT_BUMP        (1 << 7)
488 #define MTEX_3TAP_BUMP          (1 << 8)
489 #define MTEX_5TAP_BUMP          (1 << 9)
490 #define MTEX_BUMP_OBJECTSPACE   (1 << 10)
491 #define MTEX_BUMP_TEXTURESPACE  (1 << 11)
492 /* #define MTEX_BUMP_FLIPPED    (1 << 12) */ /* UNUSED */
493 #define MTEX_TIPS                               (1 << 12)  /* should use with_freestyle flag?  */
494 #define MTEX_BICUBIC_BUMP               (1 << 13)
495 #define MTEX_MAPTO_BOUNDS               (1 << 14)
496
497 /* blendtype */
498 #define MTEX_BLEND              0
499 #define MTEX_MUL                1
500 #define MTEX_ADD                2
501 #define MTEX_SUB                3
502 #define MTEX_DIV                4
503 #define MTEX_DARK               5
504 #define MTEX_DIFF               6
505 #define MTEX_LIGHT              7
506 #define MTEX_SCREEN             8
507 #define MTEX_OVERLAY    9
508 #define MTEX_BLEND_HUE          10
509 #define MTEX_BLEND_SAT          11
510 #define MTEX_BLEND_VAL          12
511 #define MTEX_BLEND_COLOR        13
512 #define MTEX_SOFT_LIGHT     15
513 #define MTEX_LIN_LIGHT      16
514
515 /* brush_map_mode */
516 #define MTEX_MAP_MODE_VIEW     0
517 #define MTEX_MAP_MODE_TILED    1
518 #define MTEX_MAP_MODE_3D       2
519 #define MTEX_MAP_MODE_AREA     3
520 #define MTEX_MAP_MODE_RANDOM   4
521 #define MTEX_MAP_MODE_STENCIL  5
522
523 /* brush_angle_mode */
524 #define MTEX_ANGLE_RANDOM      1
525 #define MTEX_ANGLE_RAKE        2
526
527 /* **************** ColorBand ********************* */
528
529 /* colormode */
530 enum {
531         COLBAND_BLEND_RGB   = 0,
532         COLBAND_BLEND_HSV   = 1,
533         COLBAND_BLEND_HSL   = 2,
534 };
535
536 /* interpolation */
537 enum {
538         COLBAND_INTERP_LINEAR       = 0,
539         COLBAND_INTERP_EASE         = 1,
540         COLBAND_INTERP_B_SPLINE     = 2,
541         COLBAND_INTERP_CARDINAL     = 3,
542         COLBAND_INTERP_CONSTANT     = 4,
543 };
544
545 /* color interpolation */
546 enum {
547         COLBAND_HUE_NEAR    = 0,
548         COLBAND_HUE_FAR     = 1,
549         COLBAND_HUE_CW      = 2,
550         COLBAND_HUE_CCW     = 3,
551 };
552
553 /* **************** EnvMap ********************* */
554
555 /* type */
556 #define ENV_CUBE        0
557 #define ENV_PLANE       1
558 #define ENV_SPHERE      2
559
560 /* stype */
561 #define ENV_STATIC      0
562 #define ENV_ANIM        1
563 #define ENV_LOAD        2
564
565 /* ok */
566 #define ENV_NORMAL      1
567 #define ENV_OSA         2
568
569 /* **************** PointDensity ********************* */
570
571 /* source */
572 #define TEX_PD_PSYS                     0
573 #define TEX_PD_OBJECT           1
574 #define TEX_PD_FILE                     2
575
576 /* falloff_type */
577 #define TEX_PD_FALLOFF_STD              0
578 #define TEX_PD_FALLOFF_SMOOTH   1
579 #define TEX_PD_FALLOFF_SOFT             2
580 #define TEX_PD_FALLOFF_CONSTANT 3
581 #define TEX_PD_FALLOFF_ROOT             4
582 #define TEX_PD_FALLOFF_PARTICLE_AGE 5
583 #define TEX_PD_FALLOFF_PARTICLE_VEL 6
584
585 /* psys_cache_space */
586 #define TEX_PD_OBJECTLOC        0
587 #define TEX_PD_OBJECTSPACE      1
588 #define TEX_PD_WORLDSPACE       2
589
590 /* flag */
591 #define TEX_PD_TURBULENCE               1
592 #define TEX_PD_FALLOFF_CURVE    2
593
594 /* noise_influence */
595 #define TEX_PD_NOISE_STATIC             0
596 #define TEX_PD_NOISE_VEL                1
597 #define TEX_PD_NOISE_AGE                2
598 #define TEX_PD_NOISE_TIME               3
599
600 /* color_source */
601 enum {
602         TEX_PD_COLOR_CONSTANT   = 0,
603         /* color_source: particles */
604         TEX_PD_COLOR_PARTAGE    = 1,
605         TEX_PD_COLOR_PARTSPEED  = 2,
606         TEX_PD_COLOR_PARTVEL    = 3,
607         /* color_source: vertices */
608         TEX_PD_COLOR_VERTCOL    = 1,
609         TEX_PD_COLOR_VERTWEIGHT = 2,
610         TEX_PD_COLOR_VERTNOR    = 3,
611 };
612
613 #define POINT_DATA_VEL          1
614 #define POINT_DATA_LIFE         2
615 #define POINT_DATA_COLOR        4
616
617 /******************** Voxel Data *****************************/
618 /* flag */
619 #define TEX_VD_STILL                    1
620
621 /* interpolation */
622 #define TEX_VD_NEARESTNEIGHBOR          0
623 #define TEX_VD_LINEAR                           1
624 #define TEX_VD_QUADRATIC        2
625 #define TEX_VD_TRICUBIC_CATROM  3
626 #define TEX_VD_TRICUBIC_BSPLINE 4
627 #define TEX_VD_TRICUBIC_SLOW    5
628
629 /* file format */
630 #define TEX_VD_BLENDERVOXEL             0
631 #define TEX_VD_RAW_8BIT                 1
632 #define TEX_VD_RAW_16BIT                2
633 #define TEX_VD_IMAGE_SEQUENCE   3
634 #define TEX_VD_SMOKE                    4
635 #define TEX_VD_HAIR                             5
636 /* for voxels which use VoxelData->source_path */
637 #define TEX_VD_IS_SOURCE_PATH(_format) (ELEM(_format, TEX_VD_BLENDERVOXEL, TEX_VD_RAW_8BIT, TEX_VD_RAW_16BIT))
638
639 /* smoke data types */
640 #define TEX_VD_SMOKEDENSITY             0
641 #define TEX_VD_SMOKEHEAT                1
642 #define TEX_VD_SMOKEVEL                 2
643 #define TEX_VD_SMOKEFLAME               3
644
645 #define TEX_VD_HAIRDENSITY              0
646 #define TEX_VD_HAIRVELOCITY             1
647 #define TEX_VD_HAIRENERGY               2
648 #define TEX_VD_HAIRRESTDENSITY  3
649
650 /* data_type */
651 #define TEX_VD_INTENSITY                0
652 #define TEX_VD_RGBA_PREMUL              1
653
654 /******************** Ocean *****************************/
655 /* output */
656 #define TEX_OCN_DISPLACEMENT    1
657 #define TEX_OCN_FOAM                    2
658 #define TEX_OCN_JPLUS                   3
659 #define TEX_OCN_EMINUS                  4
660 #define TEX_OCN_EPLUS                   5
661
662 /* flag */
663 #define TEX_OCN_GENERATE_NORMALS        1
664 #define TEX_OCN_XZ                              2
665
666 #ifdef __cplusplus
667 }
668 #endif
669
670 #endif