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