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