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