5257fb6e2cfc34a7fc8895566eb307b8573c0f02
[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         
175         struct Object *object; /* for rendering smoke sims */
176         float int_multiplier;   
177         int still_frame;
178         char source_path[1024];  /* 1024 = FILE_MAX */
179
180         /* temporary data */
181         float *dataset;
182         int cachedframe;
183         int ok;
184         
185 } VoxelData;
186
187 typedef struct OceanTex {
188         struct Object *object;
189         char oceanmod[64];
190         
191         int output;
192         int pad;
193         
194 } OceanTex;
195         
196 typedef struct Tex {
197         ID id;
198         struct AnimData *adt;   /* animation data (must be immediately after id for utilities to use it) */ 
199         
200         float noisesize, turbul;
201         float bright, contrast, saturation, rfac, gfac, bfac;
202         float filtersize, pad2;
203
204         /* newnoise: musgrave parameters */
205         float mg_H, mg_lacunarity, mg_octaves, mg_offset, mg_gain;
206
207         /* newnoise: distorted noise amount, musgrave & voronoi output scale */
208         float dist_amount, ns_outscale;
209
210         /* newnoise: voronoi nearest neighbor weights, minkovsky exponent, distance metric & color type */
211         float vn_w1;
212         float vn_w2;
213         float vn_w3;
214         float vn_w4;
215         float vn_mexp;
216         short vn_distm, vn_coltype;
217
218         short noisedepth, noisetype; /* noisedepth MUST be <= 30 else we get floating point exceptions */
219
220         /* newnoise: noisebasis type for clouds/marble/etc, noisebasis2 only used for distorted noise */
221         short noisebasis, noisebasis2;
222
223         short imaflag, flag;
224         short type, stype;
225         
226         float cropxmin, cropymin, cropxmax, cropymax;
227         int texfilter;
228         int afmax;      // anisotropic filter maximum value, ewa -> max eccentricity, feline -> max probes
229         short xrepeat, yrepeat;
230         short extend;
231
232         /* variables disabled, moved to struct iuser */
233         short fie_ima;
234         int len;
235         int frames, offset, sfra;
236         
237         float checkerdist, nabla;
238         float pad1;
239         
240         struct ImageUser iuser;
241         
242         struct bNodeTree *nodetree;
243         struct Ipo *ipo  DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
244         struct Image *ima;
245         struct ColorBand *coba;
246         struct EnvMap *env;
247         struct PreviewImage * preview;
248         struct PointDensity *pd;
249         struct VoxelData *vd;
250         struct OceanTex *ot;
251         
252         char use_nodes;
253         char pad[7];
254         
255 } Tex;
256
257 /* used for mapping and texture nodes. note: rot is now in radians */
258
259 typedef struct TexMapping {
260         float loc[3], rot[3], size[3];
261         int flag;
262         char projx, projy, projz, mapping;
263         int pad;
264         
265         float mat[4][4];
266         float min[3], max[3];
267         struct Object *ob;
268
269 } TexMapping;
270
271 typedef struct ColorMapping {
272         struct ColorBand coba;
273
274         float bright, contrast, saturation;
275         int flag;
276
277         float blend_color[3];
278         float blend_factor;
279         int blend_type, pad[3];
280 } ColorMapping;
281
282 /* texmap->flag */
283 #define TEXMAP_CLIP_MIN         1
284 #define TEXMAP_CLIP_MAX         2
285 #define TEXMAP_UNIT_MATRIX      4
286
287 /* colormap->flag */
288 #define COLORMAP_USE_RAMP 1
289
290 /* **************** TEX ********************* */
291
292 /* type */
293 #define TEX_CLOUDS              1
294 #define TEX_WOOD                2
295 #define TEX_MARBLE              3
296 #define TEX_MAGIC               4
297 #define TEX_BLEND               5
298 #define TEX_STUCCI              6
299 #define TEX_NOISE               7
300 #define TEX_IMAGE               8
301 //#define TEX_PLUGIN            9 /* Deprecated */
302 #define TEX_ENVMAP              10
303 #define TEX_MUSGRAVE    11
304 #define TEX_VORONOI             12
305 #define TEX_DISTNOISE   13
306 #define TEX_POINTDENSITY        14
307 #define TEX_VOXELDATA           15
308 #define TEX_OCEAN               16
309
310 /* musgrave stype */
311 #define TEX_MFRACTAL            0
312 #define TEX_RIDGEDMF            1
313 #define TEX_HYBRIDMF            2
314 #define TEX_FBM                         3
315 #define TEX_HTERRAIN            4
316
317 /* newnoise: noisebasis 1 & 2 */
318 #define TEX_BLENDER                     0
319 #define TEX_STDPERLIN           1
320 #define TEX_NEWPERLIN           2
321 #define TEX_VORONOI_F1          3
322 #define TEX_VORONOI_F2          4
323 #define TEX_VORONOI_F3          5
324 #define TEX_VORONOI_F4          6
325 #define TEX_VORONOI_F2F1        7
326 #define TEX_VORONOI_CRACKLE             8
327 #define TEX_CELLNOISE           14
328
329 /* newnoise: Voronoi distance metrics, vn_distm */
330 #define TEX_DISTANCE            0
331 #define TEX_DISTANCE_SQUARED            1
332 #define TEX_MANHATTAN           2
333 #define TEX_CHEBYCHEV           3
334 #define TEX_MINKOVSKY_HALF              4
335 #define TEX_MINKOVSKY_FOUR              5
336 #define TEX_MINKOVSKY           6
337
338 /* imaflag */
339 #define TEX_INTERPOL    1
340 #define TEX_USEALPHA    2
341 #define TEX_MIPMAP              4
342 #define TEX_IMAROT              16
343 #define TEX_CALCALPHA   32
344 #define TEX_NORMALMAP   2048
345 #define TEX_GAUSS_MIP   4096
346 #define TEX_FILTER_MIN  8192
347 #define TEX_DERIVATIVEMAP       16384
348
349 /* texfilter */
350 // TXF_BOX -> blender's old texture filtering method
351 #define TXF_BOX                 0
352 #define TXF_EWA                 1
353 #define TXF_FELINE              2
354 #define TXF_AREA                3
355
356 /* imaflag unused, only for version check */
357 #define TEX_FIELDS_             8
358 #define TEX_ANIMCYCLIC_ 64
359 #define TEX_ANIM5_              128
360 #define TEX_ANTIALI_    256
361 #define TEX_ANTISCALE_  512
362 #define TEX_STD_FIELD_  1024
363
364 /* flag */
365 #define TEX_COLORBAND           1
366 #define TEX_FLIPBLEND           2
367 #define TEX_NEGALPHA            4
368 #define TEX_CHECKER_ODD         8
369 #define TEX_CHECKER_EVEN        16
370 #define TEX_PRV_ALPHA           32
371 #define TEX_PRV_NOR                     64
372 #define TEX_REPEAT_XMIR         128
373 #define TEX_REPEAT_YMIR         256
374 #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 ) 
375 #define TEX_DS_EXPAND           512
376
377 /* extend (starts with 1 because of backward comp.) */
378 #define TEX_EXTEND              1
379 #define TEX_CLIP                2
380 #define TEX_REPEAT              3
381 #define TEX_CLIPCUBE    4
382 #define TEX_CHECKER             5
383
384 /* noisetype */
385 #define TEX_NOISESOFT   0
386 #define TEX_NOISEPERL   1
387
388 /* tex->noisebasis2 in texture.c - wood waveforms */
389 #define TEX_SIN                 0
390 #define TEX_SAW                 1
391 #define TEX_TRI                 2
392
393 /* tex->stype in texture.c - wood types */
394 #define TEX_BAND                0
395 #define TEX_RING                1
396 #define TEX_BANDNOISE   2
397 #define TEX_RINGNOISE   3
398
399 /* tex->stype in texture.c - cloud types */
400 #define TEX_DEFAULT             0
401 #define TEX_COLOR               1
402
403 /* tex->stype in texture.c - marble types */
404 #define TEX_SOFT                0
405 #define TEX_SHARP               1
406 #define TEX_SHARPER             2
407
408 /* tex->stype in texture.c - blend types */
409 #define TEX_LIN                 0
410 #define TEX_QUAD                1
411 #define TEX_EASE                2
412 #define TEX_DIAG                3
413 #define TEX_SPHERE              4
414 #define TEX_HALO                5
415 #define TEX_RAD                 6
416
417 /* tex->stype in texture.c - stucci types */
418 #define TEX_PLASTIC             0
419 #define TEX_WALLIN              1
420 #define TEX_WALLOUT             2
421
422 /* tex->stype in texture.c - voronoi types */
423 #define TEX_INTENSITY   0
424 #define TEX_COL1                1
425 #define TEX_COL2                2
426 #define TEX_COL3                3
427
428 /* mtex->normapspace */
429 #define MTEX_NSPACE_CAMERA      0
430 #define MTEX_NSPACE_WORLD       1
431 #define MTEX_NSPACE_OBJECT      2
432 #define MTEX_NSPACE_TANGENT     3
433
434 /* wrap */
435 #define MTEX_FLAT               0
436 #define MTEX_CUBE               1
437 #define MTEX_TUBE               2
438 #define MTEX_SPHERE             3
439
440 /* return value */
441 #define TEX_INT         0
442 #define TEX_RGB         1
443 #define TEX_NOR         2
444
445 /* pr_texture in material, world, lamp, */
446 #define TEX_PR_TEXTURE  0
447 #define TEX_PR_OTHER    1
448 #define TEX_PR_BOTH             2
449
450 /* **************** MTEX ********************* */
451
452 /* proj */
453 #define PROJ_N                  0
454 #define PROJ_X                  1
455 #define PROJ_Y                  2
456 #define PROJ_Z                  3
457
458 /* texflag */
459 #define MTEX_RGBTOINT           1
460 #define MTEX_STENCIL            2
461 #define MTEX_NEGATIVE           4
462 #define MTEX_ALPHAMIX           8
463 #define MTEX_VIEWSPACE          16
464 #define MTEX_DUPLI_MAPTO        32
465 #define MTEX_OB_DUPLI_ORIG      64
466 #define MTEX_COMPAT_BUMP        128
467 #define MTEX_3TAP_BUMP          256
468 #define MTEX_5TAP_BUMP          512
469 #define MTEX_BUMP_OBJECTSPACE   1024
470 #define MTEX_BUMP_TEXTURESPACE  2048
471 /* #define MTEX_BUMP_FLIPPED    4096 */ /* UNUSED */
472 #define MTEX_BICUBIC_BUMP               8192
473
474 /* blendtype */
475 #define MTEX_BLEND              0
476 #define MTEX_MUL                1
477 #define MTEX_ADD                2
478 #define MTEX_SUB                3
479 #define MTEX_DIV                4
480 #define MTEX_DARK               5
481 #define MTEX_DIFF               6
482 #define MTEX_LIGHT              7
483 #define MTEX_SCREEN             8
484 #define MTEX_OVERLAY    9
485 #define MTEX_BLEND_HUE          10
486 #define MTEX_BLEND_SAT          11
487 #define MTEX_BLEND_VAL          12
488 #define MTEX_BLEND_COLOR        13
489 /* free for use */
490 #define MTEX_SOFT_LIGHT     15 
491 #define MTEX_LIN_LIGHT      16
492
493 /* brush_map_mode */
494 #define MTEX_MAP_MODE_VIEW     0
495 #define MTEX_MAP_MODE_TILED    1
496 #define MTEX_MAP_MODE_3D       2
497 #define MTEX_MAP_MODE_AREA     3
498
499 /* **************** EnvMap ********************* */
500
501 /* type */
502 #define ENV_CUBE        0
503 #define ENV_PLANE       1
504 #define ENV_SPHERE      2
505
506 /* stype */
507 #define ENV_STATIC      0
508 #define ENV_ANIM        1
509 #define ENV_LOAD        2
510
511 /* ok */
512 #define ENV_NORMAL      1
513 #define ENV_OSA         2
514
515 /* **************** PointDensity ********************* */
516
517 /* source */
518 #define TEX_PD_PSYS                     0
519 #define TEX_PD_OBJECT           1
520 #define TEX_PD_FILE                     2
521
522 /* falloff_type */
523 #define TEX_PD_FALLOFF_STD              0
524 #define TEX_PD_FALLOFF_SMOOTH   1
525 #define TEX_PD_FALLOFF_SOFT             2
526 #define TEX_PD_FALLOFF_CONSTANT 3
527 #define TEX_PD_FALLOFF_ROOT             4
528 #define TEX_PD_FALLOFF_PARTICLE_AGE 5
529 #define TEX_PD_FALLOFF_PARTICLE_VEL 6
530
531 /* psys_cache_space */
532 #define TEX_PD_OBJECTLOC        0
533 #define TEX_PD_OBJECTSPACE      1
534 #define TEX_PD_WORLDSPACE       2
535
536 /* flag */
537 #define TEX_PD_TURBULENCE               1
538 #define TEX_PD_FALLOFF_CURVE    2
539
540 /* noise_influence */
541 #define TEX_PD_NOISE_STATIC             0
542 #define TEX_PD_NOISE_VEL                1
543 #define TEX_PD_NOISE_AGE                2
544 #define TEX_PD_NOISE_TIME               3
545
546 /* color_source */
547 #define TEX_PD_COLOR_CONSTANT   0
548 #define TEX_PD_COLOR_PARTAGE    1
549 #define TEX_PD_COLOR_PARTSPEED  2
550 #define TEX_PD_COLOR_PARTVEL    3
551
552 #define POINT_DATA_VEL          1
553 #define POINT_DATA_LIFE         2
554
555 /******************** Voxel Data *****************************/
556 /* flag */
557 #define TEX_VD_STILL                    1
558
559 /* interpolation */
560 #define TEX_VD_NEARESTNEIGHBOR          0
561 #define TEX_VD_LINEAR                           1
562 #define TEX_VD_QUADRATIC        2
563 #define TEX_VD_TRICUBIC_CATROM  3
564 #define TEX_VD_TRICUBIC_BSPLINE 4
565 #define TEX_VD_TRICUBIC_SLOW    5
566
567 /* file format */
568 #define TEX_VD_BLENDERVOXEL             0
569 #define TEX_VD_RAW_8BIT                 1
570 #define TEX_VD_RAW_16BIT                2
571 #define TEX_VD_IMAGE_SEQUENCE   3
572 #define TEX_VD_SMOKE                    4
573 /* for voxels which use VoxelData->source_path */
574 #define TEX_VD_IS_SOURCE_PATH(_format) (ELEM3(_format, TEX_VD_BLENDERVOXEL, TEX_VD_RAW_8BIT, TEX_VD_RAW_16BIT))
575
576 /* smoke data types */
577 #define TEX_VD_SMOKEDENSITY             0
578 #define TEX_VD_SMOKEHEAT                1
579 #define TEX_VD_SMOKEVEL                 2
580
581 /******************** Ocean *****************************/
582 /* output */
583 #define TEX_OCN_DISPLACEMENT    1
584 #define TEX_OCN_FOAM                    2
585 #define TEX_OCN_JPLUS                   3
586 #define TEX_OCN_EMINUS                  4       
587 #define TEX_OCN_EPLUS                   5
588
589 /* flag */
590 #define TEX_OCN_GENERATE_NORMALS        1       
591 #define TEX_OCN_XZ                              2       
592         
593 #ifdef __cplusplus
594 }
595 #endif
596
597 #endif
598