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