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