svn merge ^/trunk/blender -r40644:40720
[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 #define TEX_DERIVATIVEMAP       16384
346
347 /* texfilter */
348 // TXF_BOX -> blender's old texture filtering method
349 #define TXF_BOX                 0
350 #define TXF_EWA                 1
351 #define TXF_FELINE              2
352 #define TXF_AREA                3
353
354 /* imaflag unused, only for version check */
355 #define TEX_FIELDS_             8
356 #define TEX_ANIMCYCLIC_ 64
357 #define TEX_ANIM5_              128
358 #define TEX_ANTIALI_    256
359 #define TEX_ANTISCALE_  512
360 #define TEX_STD_FIELD_  1024
361
362 /* flag */
363 #define TEX_COLORBAND           1
364 #define TEX_FLIPBLEND           2
365 #define TEX_NEGALPHA            4
366 #define TEX_CHECKER_ODD         8
367 #define TEX_CHECKER_EVEN        16
368 #define TEX_PRV_ALPHA           32
369 #define TEX_PRV_NOR                     64
370 #define TEX_REPEAT_XMIR         128
371 #define TEX_REPEAT_YMIR         256
372 #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 ) 
373 #define TEX_DS_EXPAND           512
374
375 /* extend (starts with 1 because of backward comp.) */
376 #define TEX_EXTEND              1
377 #define TEX_CLIP                2
378 #define TEX_REPEAT              3
379 #define TEX_CLIPCUBE    4
380 #define TEX_CHECKER             5
381
382 /* noisetype */
383 #define TEX_NOISESOFT   0
384 #define TEX_NOISEPERL   1
385
386 /* tex->noisebasis2 in texture.c - wood waveforms */
387 #define TEX_SIN                 0
388 #define TEX_SAW                 1
389 #define TEX_TRI                 2
390
391 /* tex->stype in texture.c - wood types */
392 #define TEX_BAND                0
393 #define TEX_RING                1
394 #define TEX_BANDNOISE   2
395 #define TEX_RINGNOISE   3
396
397 /* tex->stype in texture.c - cloud types */
398 #define TEX_DEFAULT             0
399 #define TEX_COLOR               1
400
401 /* tex->stype in texture.c - marble types */
402 #define TEX_SOFT                0
403 #define TEX_SHARP               1
404 #define TEX_SHARPER             2
405
406 /* tex->stype in texture.c - blend types */
407 #define TEX_LIN                 0
408 #define TEX_QUAD                1
409 #define TEX_EASE                2
410 #define TEX_DIAG                3
411 #define TEX_SPHERE              4
412 #define TEX_HALO                5
413 #define TEX_RAD                 6
414
415 /* tex->stype in texture.c - stucci types */
416 #define TEX_PLASTIC             0
417 #define TEX_WALLIN              1
418 #define TEX_WALLOUT             2
419
420 /* tex->stype in texture.c - voronoi types */
421 #define TEX_INTENSITY   0
422 #define TEX_COL1                1
423 #define TEX_COL2                2
424 #define TEX_COL3                3
425
426 /* mtex->normapspace */
427 #define MTEX_NSPACE_CAMERA      0
428 #define MTEX_NSPACE_WORLD       1
429 #define MTEX_NSPACE_OBJECT      2
430 #define MTEX_NSPACE_TANGENT     3
431
432 /* wrap */
433 #define MTEX_FLAT               0
434 #define MTEX_CUBE               1
435 #define MTEX_TUBE               2
436 #define MTEX_SPHERE             3
437
438 /* return value */
439 #define TEX_INT         0
440 #define TEX_RGB         1
441 #define TEX_NOR         2
442
443 /* pr_texture in material, world, lamp, */
444 #define TEX_PR_TEXTURE  0
445 #define TEX_PR_OTHER    1
446 #define TEX_PR_BOTH             2
447
448 /* **************** MTEX ********************* */
449
450 /* proj */
451 #define PROJ_N                  0
452 #define PROJ_X                  1
453 #define PROJ_Y                  2
454 #define PROJ_Z                  3
455
456 /* texflag */
457 #define MTEX_RGBTOINT           1
458 #define MTEX_STENCIL            2
459 #define MTEX_NEGATIVE           4
460 #define MTEX_ALPHAMIX           8
461 #define MTEX_VIEWSPACE          16
462 #define MTEX_DUPLI_MAPTO        32
463 #define MTEX_OB_DUPLI_ORIG      64
464 #define MTEX_COMPAT_BUMP        128
465 #define MTEX_3TAP_BUMP          256
466 #define MTEX_5TAP_BUMP          512
467 #define MTEX_BUMP_OBJECTSPACE   1024
468 #define MTEX_BUMP_TEXTURESPACE  2048
469 #define MTEX_BUMP_FLIPPED               4096 /* temp flag for 2.59/2.60 */
470
471 /* blendtype */
472 #define MTEX_BLEND              0
473 #define MTEX_MUL                1
474 #define MTEX_ADD                2
475 #define MTEX_SUB                3
476 #define MTEX_DIV                4
477 #define MTEX_DARK               5
478 #define MTEX_DIFF               6
479 #define MTEX_LIGHT              7
480 #define MTEX_SCREEN             8
481 #define MTEX_OVERLAY    9
482 #define MTEX_BLEND_HUE          10
483 #define MTEX_BLEND_SAT          11
484 #define MTEX_BLEND_VAL          12
485 #define MTEX_BLEND_COLOR        13
486 #define MTEX_NUM_BLENDTYPES     14
487 #define MTEX_SOFT_LIGHT     15 
488 #define MTEX_LIN_LIGHT      16
489
490 /* brush_map_mode */
491 #define MTEX_MAP_MODE_FIXED    0
492 #define MTEX_MAP_MODE_TILED    1
493 #define MTEX_MAP_MODE_3D       2
494
495 /* **************** EnvMap ********************* */
496
497 /* type */
498 #define ENV_CUBE        0
499 #define ENV_PLANE       1
500 #define ENV_SPHERE      2
501
502 /* stype */
503 #define ENV_STATIC      0
504 #define ENV_ANIM        1
505 #define ENV_LOAD        2
506
507 /* ok */
508 #define ENV_NORMAL      1
509 #define ENV_OSA         2
510
511 /* **************** PointDensity ********************* */
512
513 /* source */
514 #define TEX_PD_PSYS                     0
515 #define TEX_PD_OBJECT           1
516 #define TEX_PD_FILE                     2
517
518 /* falloff_type */
519 #define TEX_PD_FALLOFF_STD              0
520 #define TEX_PD_FALLOFF_SMOOTH   1
521 #define TEX_PD_FALLOFF_SOFT             2
522 #define TEX_PD_FALLOFF_CONSTANT 3
523 #define TEX_PD_FALLOFF_ROOT             4
524 #define TEX_PD_FALLOFF_PARTICLE_AGE 5
525 #define TEX_PD_FALLOFF_PARTICLE_VEL 6
526
527 /* psys_cache_space */
528 #define TEX_PD_OBJECTLOC        0
529 #define TEX_PD_OBJECTSPACE      1
530 #define TEX_PD_WORLDSPACE       2
531
532 /* flag */
533 #define TEX_PD_TURBULENCE               1
534 #define TEX_PD_FALLOFF_CURVE    2
535
536 /* noise_influence */
537 #define TEX_PD_NOISE_STATIC             0
538 #define TEX_PD_NOISE_VEL                1
539 #define TEX_PD_NOISE_AGE                2
540 #define TEX_PD_NOISE_TIME               3
541
542 /* color_source */
543 #define TEX_PD_COLOR_CONSTANT   0
544 #define TEX_PD_COLOR_PARTAGE    1
545 #define TEX_PD_COLOR_PARTSPEED  2
546 #define TEX_PD_COLOR_PARTVEL    3
547
548 #define POINT_DATA_VEL          1
549 #define POINT_DATA_LIFE         2
550
551 /******************** Voxel Data *****************************/
552 /* flag */
553 #define TEX_VD_STILL                    1
554
555 /* interpolation */
556 #define TEX_VD_NEARESTNEIGHBOR          0
557 #define TEX_VD_LINEAR                           1
558 #define TEX_VD_QUADRATIC        2
559 #define TEX_VD_TRICUBIC_CATROM  3
560 #define TEX_VD_TRICUBIC_BSPLINE 4
561 #define TEX_VD_TRICUBIC_SLOW    5
562
563 /* file format */
564 #define TEX_VD_BLENDERVOXEL             0
565 #define TEX_VD_RAW_8BIT                 1
566 #define TEX_VD_RAW_16BIT                2
567 #define TEX_VD_IMAGE_SEQUENCE   3
568 #define TEX_VD_SMOKE                    4
569 /* for voxels which use VoxelData->source_path */
570 #define TEX_VD_IS_SOURCE_PATH(_format) (ELEM3(_format, TEX_VD_BLENDERVOXEL, TEX_VD_RAW_8BIT, TEX_VD_RAW_16BIT))
571
572 /* smoke data types */
573 #define TEX_VD_SMOKEDENSITY             0
574 #define TEX_VD_SMOKEHEAT                1
575 #define TEX_VD_SMOKEVEL                 2
576
577 #ifdef __cplusplus
578 }
579 #endif
580
581 #endif
582