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