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