own fix r34446, was incorrect, fixed properly now.
[blender.git] / source / blender / makesdna / DNA_texture_types.h
1 /**
2  * blenlib/DNA_texture_types.h (mar-2001 nzc)
3  *
4  * $Id$ 
5  *
6  * ***** BEGIN GPL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL LICENSE BLOCK *****
30  */
31 #ifndef DNA_TEXTURE_TYPES_H
32 #define DNA_TEXTURE_TYPES_H
33
34 #include "DNA_ID.h"
35 #include "DNA_image_types.h" /* ImageUser */
36
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40
41 struct AnimData;
42 struct Ipo;
43 struct PluginTex;
44 struct ColorBand;
45 struct EnvMap;
46 struct Object;
47 struct Tex;
48 struct Image;
49 struct PreviewImage;
50 struct ImBuf;
51
52 typedef struct MTex {
53
54         short texco, mapto, maptoneg, blendtype;
55         struct Object *object;
56         struct Tex *tex;
57         char uvname[32];
58         
59         char projx, projy, projz, mapping;
60         float ofs[3], size[3], rot;
61         
62         short texflag, colormodel, pmapto, pmaptoneg;
63         short normapspace, which_output;
64         char brush_map_mode, pad[7];
65         float r, g, b, k;
66         float def_var, rt;
67         
68         /* common */
69         float colfac, varfac;
70         
71         /* material */
72         float norfac, dispfac, warpfac;
73         float colspecfac, mirrfac, alphafac;
74         float difffac, specfac, emitfac, hardfac;
75         float raymirrfac, translfac, ambfac;
76         float colemitfac, colreflfac, coltransfac;
77         float densfac, scatterfac, reflfac;
78
79         /* particles */
80         float timefac, lengthfac, clumpfac;
81         float kinkfac, roughfac, padensfac;
82         float lifefac, sizefac, ivelfac, pvelfac;
83
84         /* lamp */
85         float shadowfac;
86
87         /* world */
88         float zenupfac, zendownfac, blendfac;
89 } MTex;
90
91 #ifndef DNA_USHORT_FIX
92 #define DNA_USHORT_FIX
93 /**
94  * @deprecated This typedef serves to avoid badly typed functions when
95  * @deprecated compiling while delivering a proper dna.c. Do not use
96  * @deprecated it in any case.
97  */
98 typedef unsigned short dna_ushort_fix;
99 #endif
100
101 typedef struct PluginTex {
102         char name[160];
103         void *handle;
104         
105         char *pname;
106         char *stnames;
107
108         int stypes;
109         int vars;
110         void *varstr;
111         float *result;
112         float *cfra;
113         
114         float data[32];
115
116         int (*doit)(void);
117         void (*instance_init)(void *);
118
119         /* should be void (*)(unsigned short)... patched */     
120         void (*callback)(dna_ushort_fix);
121         
122         int version, pad;
123 } PluginTex;
124
125 typedef struct CBData {
126         float r, g, b, a, pos;
127         int cur;
128 } CBData;
129
130 /* 32 = MAXCOLORBAND */
131 /* note that this has to remain a single struct, for UserDef */
132 typedef struct ColorBand {
133         short flag, tot, cur, ipotype;
134         CBData data[32];
135         
136 } ColorBand;
137
138 typedef struct EnvMap {
139         struct Object *object;
140         struct Image *ima;              /* type ENV_LOAD */
141         struct ImBuf *cube[6];          /* these images are dynamic, not part of the main struct */
142         float imat[4][4];
143         float obimat[3][3];
144         short type, stype;
145         float clipsta, clipend;
146         float viewscale;        /* viewscale is for planar envmaps to zoom in or out */
147         unsigned int notlay;
148         short cuberes, depth;
149         int ok, lastframe;
150         short recalc, lastsize;
151 } EnvMap;
152
153 typedef struct PointDensity {
154         short flag;
155
156         short falloff_type;
157         float falloff_softness;
158         float radius;
159         short source;
160         short color_source;
161         int totpoints;
162         
163         int pdpad;
164
165         struct Object *object;  /* for 'Object' or 'Particle system' type - source object */
166         int psys;                               /* index+1 in ob.particlesystem, non-ID pointer not allowed */
167         short psys_cache_space;         /* cache points in worldspace, object space, ... ? */
168         short ob_cache_space;           /* cache points in worldspace, object space, ... ? */
169         
170         void *point_tree;               /* the acceleration tree containing points */
171         float *point_data;              /* dynamically allocated extra for extra information, like particle age */
172         
173         float noise_size;
174         short noise_depth;
175         short noise_influence;
176         short noise_basis;
177         short pdpad3[3];
178         float noise_fac;
179         
180         float speed_scale;
181         struct ColorBand *coba; /* for time -> color */
182         
183 } PointDensity;
184
185 typedef struct VoxelData {
186         int resol[3];
187         int interp_type;
188         short file_format;
189         short flag;
190         short extend;
191         short smoked_type;
192         
193         struct Object *object; /* for rendering smoke sims */
194         float int_multiplier;   
195         int still_frame;
196         char source_path[240];
197
198         /* temporary data */
199         float *dataset;
200         int cachedframe;
201         int ok;
202         
203 } VoxelData;
204
205 typedef struct Tex {
206         ID id;
207         struct AnimData *adt;   /* animation data (must be immediately after id for utilities to use it) */ 
208         
209         float noisesize, turbul;
210         float bright, contrast, saturation, rfac, gfac, bfac;
211         float filtersize, pad2;
212
213         /* newnoise: musgrave parameters */
214         float mg_H, mg_lacunarity, mg_octaves, mg_offset, mg_gain;
215
216         /* newnoise: distorted noise amount, musgrave & voronoi ouput scale */
217         float dist_amount, ns_outscale;
218
219         /* newnoise: voronoi nearest neighbour weights, minkovsky exponent, distance metric & color type */
220         float vn_w1;
221         float vn_w2;
222         float vn_w3;
223         float vn_w4;
224         float vn_mexp;
225         short vn_distm, vn_coltype;
226
227         short noisedepth, noisetype; /* noisedepth MUST be <= 30 else we get floating point exceptions */
228
229         /* newnoise: noisebasis type for clouds/marble/etc, noisebasis2 only used for distorted noise */
230         short noisebasis, noisebasis2;
231
232         short imaflag, flag;
233         short type, stype;
234         
235         float cropxmin, cropymin, cropxmax, cropymax;
236         int texfilter;
237         int afmax;      // anisotropic filter maximum value, ewa -> max eccentricity, feline -> max probes
238         short xrepeat, yrepeat;
239         short extend;
240
241         /* variables disabled, moved to struct iuser */
242         short fie_ima;
243         int len;
244         int frames, offset, sfra;
245         
246         float checkerdist, nabla;
247         float pad1;
248         
249         struct ImageUser iuser;
250         
251         struct bNodeTree *nodetree;
252         struct Ipo *ipo;                                // XXX depreceated... old animation system
253         struct Image *ima;
254         struct PluginTex *plugin;
255         struct ColorBand *coba;
256         struct EnvMap *env;
257         struct PreviewImage * preview;
258         struct PointDensity *pd;
259         struct VoxelData *vd;
260         
261         char use_nodes;
262         char pad[7];
263         
264 } Tex;
265
266 /* used for mapping node. note: rot is in degrees */
267
268 typedef struct TexMapping {
269         float loc[3], rot[3], size[3];
270         int flag;
271         
272         float mat[4][4];
273         float min[3], max[3];
274         struct Object *ob;
275
276 } TexMapping;
277
278 /* texmap->flag */
279 #define TEXMAP_CLIP_MIN 1
280 #define TEXMAP_CLIP_MAX 2
281
282
283 /* **************** TEX ********************* */
284
285 /* type */
286 #define TEX_CLOUDS              1
287 #define TEX_WOOD                2
288 #define TEX_MARBLE              3
289 #define TEX_MAGIC               4
290 #define TEX_BLEND               5
291 #define TEX_STUCCI              6
292 #define TEX_NOISE               7
293 #define TEX_IMAGE               8
294 #define TEX_PLUGIN              9
295 #define TEX_ENVMAP              10
296 #define TEX_MUSGRAVE    11
297 #define TEX_VORONOI             12
298 #define TEX_DISTNOISE   13
299 #define TEX_POINTDENSITY        14
300 #define TEX_VOXELDATA           15
301
302 /* musgrave stype */
303 #define TEX_MFRACTAL            0
304 #define TEX_RIDGEDMF            1
305 #define TEX_HYBRIDMF            2
306 #define TEX_FBM                         3
307 #define TEX_HTERRAIN            4
308
309 /* newnoise: noisebasis 1 & 2 */
310 #define TEX_BLENDER                     0
311 #define TEX_STDPERLIN           1
312 #define TEX_NEWPERLIN           2
313 #define TEX_VORONOI_F1          3
314 #define TEX_VORONOI_F2          4
315 #define TEX_VORONOI_F3          5
316 #define TEX_VORONOI_F4          6
317 #define TEX_VORONOI_F2F1        7
318 #define TEX_VORONOI_CRACKLE             8
319 #define TEX_CELLNOISE           14
320
321 /* newnoise: Voronoi distance metrics, vn_distm */
322 #define TEX_DISTANCE            0
323 #define TEX_DISTANCE_SQUARED            1
324 #define TEX_MANHATTAN           2
325 #define TEX_CHEBYCHEV           3
326 #define TEX_MINKOVSKY_HALF              4
327 #define TEX_MINKOVSKY_FOUR              5
328 #define TEX_MINKOVSKY           6
329
330 /* imaflag */
331 #define TEX_INTERPOL    1
332 #define TEX_USEALPHA    2
333 #define TEX_MIPMAP              4
334 #define TEX_IMAROT              16
335 #define TEX_CALCALPHA   32
336 #define TEX_NORMALMAP   2048
337 #define TEX_GAUSS_MIP   4096
338 #define TEX_FILTER_MIN  8192
339
340 /* texfilter */
341 // TXF_BOX -> blender's old texture filtering method
342 #define TXF_BOX                 0
343 #define TXF_EWA                 1
344 #define TXF_FELINE              2
345 #define TXF_AREA                3
346
347 /* imaflag unused, only for version check */
348 #define TEX_FIELDS_             8
349 #define TEX_ANIMCYCLIC_ 64
350 #define TEX_ANIM5_              128
351 #define TEX_ANTIALI_    256
352 #define TEX_ANTISCALE_  512
353 #define TEX_STD_FIELD_  1024
354
355 /* flag */
356 #define TEX_COLORBAND           1
357 #define TEX_FLIPBLEND           2
358 #define TEX_NEGALPHA            4
359 #define TEX_CHECKER_ODD         8
360 #define TEX_CHECKER_EVEN        16
361 #define TEX_PRV_ALPHA           32
362 #define TEX_PRV_NOR                     64
363 #define TEX_REPEAT_XMIR         128
364 #define TEX_REPEAT_YMIR         256
365 #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 ) 
366 #define TEX_DS_EXPAND           512
367
368 /* extend (starts with 1 because of backward comp.) */
369 #define TEX_EXTEND              1
370 #define TEX_CLIP                2
371 #define TEX_REPEAT              3
372 #define TEX_CLIPCUBE    4
373 #define TEX_CHECKER             5
374
375 /* noisetype */
376 #define TEX_NOISESOFT   0
377 #define TEX_NOISEPERL   1
378
379 /* tex->noisebasis2 in texture.c - wood waveforms */
380 #define TEX_SIN                 0
381 #define TEX_SAW                 1
382 #define TEX_TRI                 2
383
384 /* tex->stype in texture.c - wood types */
385 #define TEX_BAND                0
386 #define TEX_RING                1
387 #define TEX_BANDNOISE   2
388 #define TEX_RINGNOISE   3
389
390 /* tex->stype in texture.c - cloud types */
391 #define TEX_DEFAULT             0
392 #define TEX_COLOR               1
393
394 /* tex->stype in texture.c - marble types */
395 #define TEX_SOFT                0
396 #define TEX_SHARP               1
397 #define TEX_SHARPER             2
398
399 /* tex->stype in texture.c - blend types */
400 #define TEX_LIN                 0
401 #define TEX_QUAD                1
402 #define TEX_EASE                2
403 #define TEX_DIAG                3
404 #define TEX_SPHERE              4
405 #define TEX_HALO                5
406 #define TEX_RAD                 6
407
408 /* tex->stype in texture.c - stucci types */
409 #define TEX_PLASTIC             0
410 #define TEX_WALLIN              1
411 #define TEX_WALLOUT             2
412
413 /* tex->stype in texture.c - voronoi types */
414 #define TEX_INTENSITY   0
415 #define TEX_COL1                1
416 #define TEX_COL2                2
417 #define TEX_COL3                3
418
419 /* mtex->normapspace */
420 #define MTEX_NSPACE_CAMERA      0
421 #define MTEX_NSPACE_WORLD       1
422 #define MTEX_NSPACE_OBJECT      2
423 #define MTEX_NSPACE_TANGENT     3
424
425 /* wrap */
426 #define MTEX_FLAT               0
427 #define MTEX_CUBE               1
428 #define MTEX_TUBE               2
429 #define MTEX_SPHERE             3
430
431 /* return value */
432 #define TEX_INT         0
433 #define TEX_RGB         1
434 #define TEX_NOR         2
435
436 /* pr_texture in material, world, lamp, */
437 #define TEX_PR_TEXTURE  0
438 #define TEX_PR_OTHER    1
439 #define TEX_PR_BOTH             2
440
441 /* **************** MTEX ********************* */
442
443 /* proj */
444 #define PROJ_N                  0
445 #define PROJ_X                  1
446 #define PROJ_Y                  2
447 #define PROJ_Z                  3
448
449 /* texflag */
450 #define MTEX_RGBTOINT           1
451 #define MTEX_STENCIL            2
452 #define MTEX_NEGATIVE           4
453 #define MTEX_ALPHAMIX           8
454 #define MTEX_VIEWSPACE          16
455 #define MTEX_DUPLI_MAPTO        32
456 #define MTEX_OB_DUPLI_ORIG      64
457 #define MTEX_NEW_BUMP           128
458
459 /* blendtype */
460 #define MTEX_BLEND              0
461 #define MTEX_MUL                1
462 #define MTEX_ADD                2
463 #define MTEX_SUB                3
464 #define MTEX_DIV                4
465 #define MTEX_DARK               5
466 #define MTEX_DIFF               6
467 #define MTEX_LIGHT              7
468 #define MTEX_SCREEN             8
469 #define MTEX_OVERLAY    9
470 #define MTEX_BLEND_HUE          10
471 #define MTEX_BLEND_SAT          11
472 #define MTEX_BLEND_VAL          12
473 #define MTEX_BLEND_COLOR        13
474 #define MTEX_NUM_BLENDTYPES     14
475 #define MTEX_SOFT_LIGHT     15 
476 #define MTEX_LIN_LIGHT      16
477
478 /* brush_map_mode */
479 #define MTEX_MAP_MODE_FIXED    0
480 #define MTEX_MAP_MODE_TILED    1
481 #define MTEX_MAP_MODE_3D       2
482
483 /* **************** EnvMap ********************* */
484
485 /* type */
486 #define ENV_CUBE        0
487 #define ENV_PLANE       1
488 #define ENV_SPHERE      2
489
490 /* stype */
491 #define ENV_STATIC      0
492 #define ENV_ANIM        1
493 #define ENV_LOAD        2
494
495 /* ok */
496 #define ENV_NORMAL      1
497 #define ENV_OSA         2
498
499 /* **************** PointDensity ********************* */
500
501 /* source */
502 #define TEX_PD_PSYS                     0
503 #define TEX_PD_OBJECT           1
504 #define TEX_PD_FILE                     2
505
506 /* falloff_type */
507 #define TEX_PD_FALLOFF_STD              0
508 #define TEX_PD_FALLOFF_SMOOTH   1
509 #define TEX_PD_FALLOFF_SOFT             2
510 #define TEX_PD_FALLOFF_CONSTANT 3
511 #define TEX_PD_FALLOFF_ROOT             4
512
513 /* psys_cache_space */
514 #define TEX_PD_OBJECTLOC        0
515 #define TEX_PD_OBJECTSPACE      1
516 #define TEX_PD_WORLDSPACE       2
517
518 /* flag */
519 #define TEX_PD_TURBULENCE       1
520
521
522 /* noise_influence */
523 #define TEX_PD_NOISE_STATIC             0
524 #define TEX_PD_NOISE_VEL                1
525 #define TEX_PD_NOISE_AGE                2
526 #define TEX_PD_NOISE_TIME               3
527
528 /* color_source */
529 #define TEX_PD_COLOR_CONSTANT   0
530 #define TEX_PD_COLOR_PARTAGE    1
531 #define TEX_PD_COLOR_PARTSPEED  2
532 #define TEX_PD_COLOR_PARTVEL    3
533
534 #define POINT_DATA_VEL          1
535 #define POINT_DATA_LIFE         2
536
537 /******************** Voxel Data *****************************/
538 /* flag */
539 #define TEX_VD_STILL                    1
540
541 /* interpolation */
542 #define TEX_VD_NEARESTNEIGHBOR          0
543 #define TEX_VD_LINEAR                           1
544 #define TEX_VD_QUADRATIC        2
545 #define TEX_VD_TRICUBIC_CATROM  3
546 #define TEX_VD_TRICUBIC_BSPLINE 4
547 #define TEX_VD_TRICUBIC_SLOW    5
548
549 /* file format */
550 #define TEX_VD_BLENDERVOXEL             0
551 #define TEX_VD_RAW_8BIT                 1
552 #define TEX_VD_RAW_16BIT                2
553 #define TEX_VD_IMAGE_SEQUENCE   3
554 #define TEX_VD_SMOKE                    4
555 /* for voxels which use VoxelData->source_path */
556 #define TEX_VD_IS_SOURCE_PATH(_format) (ELEM3(_format, TEX_VD_BLENDERVOXEL, TEX_VD_RAW_8BIT, TEX_VD_RAW_16BIT))
557
558 /* smoke data types */
559 #define TEX_VD_SMOKEDENSITY             0
560 #define TEX_VD_SMOKEHEAT                1
561 #define TEX_VD_SMOKEVEL                 2
562
563 #ifdef __cplusplus
564 }
565 #endif
566
567 #endif
568