== file browser ==
[blender.git] / source / blender / makesdna / DNA_texture_types.h
1 /*
2  * $Id$ 
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29 #ifndef DNA_TEXTURE_TYPES_H
30 #define DNA_TEXTURE_TYPES_H
31
32 /** \file DNA_texture_types.h
33  *  \ingroup DNA
34  *  \since mar-2001
35  *  \author nzc
36  */
37
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 PluginTex;
48 struct ColorBand;
49 struct EnvMap;
50 struct Object;
51 struct Tex;
52 struct Image;
53 struct PreviewImage;
54 struct ImBuf;
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;
185         struct ColorBand *coba; /* for time -> color */
186         
187 } PointDensity;
188
189 typedef struct VoxelData {
190         int resol[3];
191         int interp_type;
192         short file_format;
193         short flag;
194         short extend;
195         short smoked_type;
196         
197         struct Object *object; /* for rendering smoke sims */
198         float int_multiplier;   
199         int still_frame;
200         char source_path[240];
201
202         /* temporary data */
203         float *dataset;
204         int cachedframe;
205         int ok;
206         
207 } VoxelData;
208
209 typedef struct Tex {
210         ID id;
211         struct AnimData *adt;   /* animation data (must be immediately after id for utilities to use it) */ 
212         
213         float noisesize, turbul;
214         float bright, contrast, saturation, rfac, gfac, bfac;
215         float filtersize, pad2;
216
217         /* newnoise: musgrave parameters */
218         float mg_H, mg_lacunarity, mg_octaves, mg_offset, mg_gain;
219
220         /* newnoise: distorted noise amount, musgrave & voronoi ouput scale */
221         float dist_amount, ns_outscale;
222
223         /* newnoise: voronoi nearest neighbour weights, minkovsky exponent, distance metric & color type */
224         float vn_w1;
225         float vn_w2;
226         float vn_w3;
227         float vn_w4;
228         float vn_mexp;
229         short vn_distm, vn_coltype;
230
231         short noisedepth, noisetype; /* noisedepth MUST be <= 30 else we get floating point exceptions */
232
233         /* newnoise: noisebasis type for clouds/marble/etc, noisebasis2 only used for distorted noise */
234         short noisebasis, noisebasis2;
235
236         short imaflag, flag;
237         short type, stype;
238         
239         float cropxmin, cropymin, cropxmax, cropymax;
240         int texfilter;
241         int afmax;      // anisotropic filter maximum value, ewa -> max eccentricity, feline -> max probes
242         short xrepeat, yrepeat;
243         short extend;
244
245         /* variables disabled, moved to struct iuser */
246         short fie_ima;
247         int len;
248         int frames, offset, sfra;
249         
250         float checkerdist, nabla;
251         float pad1;
252         
253         struct ImageUser iuser;
254         
255         struct bNodeTree *nodetree;
256         struct Ipo *ipo;                                // XXX depreceated... old animation system
257         struct Image *ima;
258         struct PluginTex *plugin;
259         struct ColorBand *coba;
260         struct EnvMap *env;
261         struct PreviewImage * preview;
262         struct PointDensity *pd;
263         struct VoxelData *vd;
264         
265         char use_nodes;
266         char pad[7];
267         
268 } Tex;
269
270 /* used for mapping node. note: rot is in degrees */
271
272 typedef struct TexMapping {
273         float loc[3], rot[3], size[3];
274         int flag;
275         
276         float mat[4][4];
277         float min[3], max[3];
278         struct Object *ob;
279
280 } TexMapping;
281
282 /* texmap->flag */
283 #define TEXMAP_CLIP_MIN 1
284 #define TEXMAP_CLIP_MAX 2
285
286
287 /* **************** TEX ********************* */
288
289 /* type */
290 #define TEX_CLOUDS              1
291 #define TEX_WOOD                2
292 #define TEX_MARBLE              3
293 #define TEX_MAGIC               4
294 #define TEX_BLEND               5
295 #define TEX_STUCCI              6
296 #define TEX_NOISE               7
297 #define TEX_IMAGE               8
298 #define TEX_PLUGIN              9
299 #define TEX_ENVMAP              10
300 #define TEX_MUSGRAVE    11
301 #define TEX_VORONOI             12
302 #define TEX_DISTNOISE   13
303 #define TEX_POINTDENSITY        14
304 #define TEX_VOXELDATA           15
305
306 /* musgrave stype */
307 #define TEX_MFRACTAL            0
308 #define TEX_RIDGEDMF            1
309 #define TEX_HYBRIDMF            2
310 #define TEX_FBM                         3
311 #define TEX_HTERRAIN            4
312
313 /* newnoise: noisebasis 1 & 2 */
314 #define TEX_BLENDER                     0
315 #define TEX_STDPERLIN           1
316 #define TEX_NEWPERLIN           2
317 #define TEX_VORONOI_F1          3
318 #define TEX_VORONOI_F2          4
319 #define TEX_VORONOI_F3          5
320 #define TEX_VORONOI_F4          6
321 #define TEX_VORONOI_F2F1        7
322 #define TEX_VORONOI_CRACKLE             8
323 #define TEX_CELLNOISE           14
324
325 /* newnoise: Voronoi distance metrics, vn_distm */
326 #define TEX_DISTANCE            0
327 #define TEX_DISTANCE_SQUARED            1
328 #define TEX_MANHATTAN           2
329 #define TEX_CHEBYCHEV           3
330 #define TEX_MINKOVSKY_HALF              4
331 #define TEX_MINKOVSKY_FOUR              5
332 #define TEX_MINKOVSKY           6
333
334 /* imaflag */
335 #define TEX_INTERPOL    1
336 #define TEX_USEALPHA    2
337 #define TEX_MIPMAP              4
338 #define TEX_IMAROT              16
339 #define TEX_CALCALPHA   32
340 #define TEX_NORMALMAP   2048
341 #define TEX_GAUSS_MIP   4096
342 #define TEX_FILTER_MIN  8192
343
344 /* texfilter */
345 // TXF_BOX -> blender's old texture filtering method
346 #define TXF_BOX                 0
347 #define TXF_EWA                 1
348 #define TXF_FELINE              2
349 #define TXF_AREA                3
350
351 /* imaflag unused, only for version check */
352 #define TEX_FIELDS_             8
353 #define TEX_ANIMCYCLIC_ 64
354 #define TEX_ANIM5_              128
355 #define TEX_ANTIALI_    256
356 #define TEX_ANTISCALE_  512
357 #define TEX_STD_FIELD_  1024
358
359 /* flag */
360 #define TEX_COLORBAND           1
361 #define TEX_FLIPBLEND           2
362 #define TEX_NEGALPHA            4
363 #define TEX_CHECKER_ODD         8
364 #define TEX_CHECKER_EVEN        16
365 #define TEX_PRV_ALPHA           32
366 #define TEX_PRV_NOR                     64
367 #define TEX_REPEAT_XMIR         128
368 #define TEX_REPEAT_YMIR         256
369 #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 ) 
370 #define TEX_DS_EXPAND           512
371
372 /* extend (starts with 1 because of backward comp.) */
373 #define TEX_EXTEND              1
374 #define TEX_CLIP                2
375 #define TEX_REPEAT              3
376 #define TEX_CLIPCUBE    4
377 #define TEX_CHECKER             5
378
379 /* noisetype */
380 #define TEX_NOISESOFT   0
381 #define TEX_NOISEPERL   1
382
383 /* tex->noisebasis2 in texture.c - wood waveforms */
384 #define TEX_SIN                 0
385 #define TEX_SAW                 1
386 #define TEX_TRI                 2
387
388 /* tex->stype in texture.c - wood types */
389 #define TEX_BAND                0
390 #define TEX_RING                1
391 #define TEX_BANDNOISE   2
392 #define TEX_RINGNOISE   3
393
394 /* tex->stype in texture.c - cloud types */
395 #define TEX_DEFAULT             0
396 #define TEX_COLOR               1
397
398 /* tex->stype in texture.c - marble types */
399 #define TEX_SOFT                0
400 #define TEX_SHARP               1
401 #define TEX_SHARPER             2
402
403 /* tex->stype in texture.c - blend types */
404 #define TEX_LIN                 0
405 #define TEX_QUAD                1
406 #define TEX_EASE                2
407 #define TEX_DIAG                3
408 #define TEX_SPHERE              4
409 #define TEX_HALO                5
410 #define TEX_RAD                 6
411
412 /* tex->stype in texture.c - stucci types */
413 #define TEX_PLASTIC             0
414 #define TEX_WALLIN              1
415 #define TEX_WALLOUT             2
416
417 /* tex->stype in texture.c - voronoi types */
418 #define TEX_INTENSITY   0
419 #define TEX_COL1                1
420 #define TEX_COL2                2
421 #define TEX_COL3                3
422
423 /* mtex->normapspace */
424 #define MTEX_NSPACE_CAMERA      0
425 #define MTEX_NSPACE_WORLD       1
426 #define MTEX_NSPACE_OBJECT      2
427 #define MTEX_NSPACE_TANGENT     3
428
429 /* wrap */
430 #define MTEX_FLAT               0
431 #define MTEX_CUBE               1
432 #define MTEX_TUBE               2
433 #define MTEX_SPHERE             3
434
435 /* return value */
436 #define TEX_INT         0
437 #define TEX_RGB         1
438 #define TEX_NOR         2
439
440 /* pr_texture in material, world, lamp, */
441 #define TEX_PR_TEXTURE  0
442 #define TEX_PR_OTHER    1
443 #define TEX_PR_BOTH             2
444
445 /* **************** MTEX ********************* */
446
447 /* proj */
448 #define PROJ_N                  0
449 #define PROJ_X                  1
450 #define PROJ_Y                  2
451 #define PROJ_Z                  3
452
453 /* texflag */
454 #define MTEX_RGBTOINT           1
455 #define MTEX_STENCIL            2
456 #define MTEX_NEGATIVE           4
457 #define MTEX_ALPHAMIX           8
458 #define MTEX_VIEWSPACE          16
459 #define MTEX_DUPLI_MAPTO        32
460 #define MTEX_OB_DUPLI_ORIG      64
461 #define MTEX_COMPAT_BUMP        128
462 #define MTEX_3TAP_BUMP          256
463 #define MTEX_5TAP_BUMP          512
464 #define MTEX_BUMP_OBJECTSPACE   1024
465 #define MTEX_BUMP_TEXTURESPACE  2048
466
467 /* blendtype */
468 #define MTEX_BLEND              0
469 #define MTEX_MUL                1
470 #define MTEX_ADD                2
471 #define MTEX_SUB                3
472 #define MTEX_DIV                4
473 #define MTEX_DARK               5
474 #define MTEX_DIFF               6
475 #define MTEX_LIGHT              7
476 #define MTEX_SCREEN             8
477 #define MTEX_OVERLAY    9
478 #define MTEX_BLEND_HUE          10
479 #define MTEX_BLEND_SAT          11
480 #define MTEX_BLEND_VAL          12
481 #define MTEX_BLEND_COLOR        13
482 #define MTEX_NUM_BLENDTYPES     14
483 #define MTEX_SOFT_LIGHT     15 
484 #define MTEX_LIN_LIGHT      16
485
486 /* brush_map_mode */
487 #define MTEX_MAP_MODE_FIXED    0
488 #define MTEX_MAP_MODE_TILED    1
489 #define MTEX_MAP_MODE_3D       2
490
491 /* **************** EnvMap ********************* */
492
493 /* type */
494 #define ENV_CUBE        0
495 #define ENV_PLANE       1
496 #define ENV_SPHERE      2
497
498 /* stype */
499 #define ENV_STATIC      0
500 #define ENV_ANIM        1
501 #define ENV_LOAD        2
502
503 /* ok */
504 #define ENV_NORMAL      1
505 #define ENV_OSA         2
506
507 /* **************** PointDensity ********************* */
508
509 /* source */
510 #define TEX_PD_PSYS                     0
511 #define TEX_PD_OBJECT           1
512 #define TEX_PD_FILE                     2
513
514 /* falloff_type */
515 #define TEX_PD_FALLOFF_STD              0
516 #define TEX_PD_FALLOFF_SMOOTH   1
517 #define TEX_PD_FALLOFF_SOFT             2
518 #define TEX_PD_FALLOFF_CONSTANT 3
519 #define TEX_PD_FALLOFF_ROOT             4
520
521 /* psys_cache_space */
522 #define TEX_PD_OBJECTLOC        0
523 #define TEX_PD_OBJECTSPACE      1
524 #define TEX_PD_WORLDSPACE       2
525
526 /* flag */
527 #define TEX_PD_TURBULENCE       1
528
529
530 /* noise_influence */
531 #define TEX_PD_NOISE_STATIC             0
532 #define TEX_PD_NOISE_VEL                1
533 #define TEX_PD_NOISE_AGE                2
534 #define TEX_PD_NOISE_TIME               3
535
536 /* color_source */
537 #define TEX_PD_COLOR_CONSTANT   0
538 #define TEX_PD_COLOR_PARTAGE    1
539 #define TEX_PD_COLOR_PARTSPEED  2
540 #define TEX_PD_COLOR_PARTVEL    3
541
542 #define POINT_DATA_VEL          1
543 #define POINT_DATA_LIFE         2
544
545 /******************** Voxel Data *****************************/
546 /* flag */
547 #define TEX_VD_STILL                    1
548
549 /* interpolation */
550 #define TEX_VD_NEARESTNEIGHBOR          0
551 #define TEX_VD_LINEAR                           1
552 #define TEX_VD_QUADRATIC        2
553 #define TEX_VD_TRICUBIC_CATROM  3
554 #define TEX_VD_TRICUBIC_BSPLINE 4
555 #define TEX_VD_TRICUBIC_SLOW    5
556
557 /* file format */
558 #define TEX_VD_BLENDERVOXEL             0
559 #define TEX_VD_RAW_8BIT                 1
560 #define TEX_VD_RAW_16BIT                2
561 #define TEX_VD_IMAGE_SEQUENCE   3
562 #define TEX_VD_SMOKE                    4
563 /* for voxels which use VoxelData->source_path */
564 #define TEX_VD_IS_SOURCE_PATH(_format) (ELEM3(_format, TEX_VD_BLENDERVOXEL, TEX_VD_RAW_8BIT, TEX_VD_RAW_16BIT))
565
566 /* smoke data types */
567 #define TEX_VD_SMOKEDENSITY             0
568 #define TEX_VD_SMOKEHEAT                1
569 #define TEX_VD_SMOKEVEL                 2
570
571 #ifdef __cplusplus
572 }
573 #endif
574
575 #endif
576