418f53edb9e514480cd9b6e74fe9397e9881f588
[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
28 /** \file DNA_texture_types.h
29  *  \ingroup DNA
30  *  \since mar-2001
31  *  \author nzc
32  */
33
34 #ifndef __DNA_TEXTURE_TYPES_H__
35 #define __DNA_TEXTURE_TYPES_H__
36
37 #include "DNA_defs.h"
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 ColorBand;
47 struct CurveMapping;
48 struct ImBuf;
49 struct Image;
50 struct Ipo;
51 struct Object;
52 struct PreviewImage;
53 struct Tex;
54
55 typedef struct MTex {
56
57         short texco, mapto, maptoneg, blendtype;
58         struct Object *object;
59         struct Tex *tex;
60         /** MAX_CUSTOMDATA_LAYER_NAME. */
61         char uvname[64];
62
63         char projx, projy, projz, mapping;
64         char brush_map_mode, brush_angle_mode;
65         char pad[2];
66         float ofs[3], size[3], rot, random_angle;
67
68         short texflag, colormodel, pmapto, pmaptoneg;
69         short normapspace, which_output;
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, kinkampfac, roughfac, padensfac, gravityfac;
87         float lifefac, sizefac, ivelfac, fieldfac;
88         float twistfac;
89
90         /* lamp */
91         float shadowfac;
92
93         /* world */
94         float zenupfac, zendownfac, blendfac;
95 } MTex;
96
97 #ifndef DNA_USHORT_FIX
98 #define DNA_USHORT_FIX
99 /**
100  * \deprecated This typedef serves to avoid badly typed functions when
101  * \deprecated compiling while delivering a proper dna.c. Do not use
102  * \deprecated it in any case.
103  */
104 typedef unsigned short dna_ushort_fix;
105 #endif
106
107 typedef struct CBData {
108         float r, g, b, a, pos;
109         int cur;
110 } CBData;
111
112 /* 32 = MAXCOLORBAND */
113 /* note that this has to remain a single struct, for UserDef */
114 typedef struct ColorBand {
115         short tot, cur;
116         char ipotype, ipotype_hue;
117         char color_mode;
118         char pad[1];
119
120         CBData data[32];
121 } ColorBand;
122
123 typedef struct PointDensity {
124         short flag;
125
126         short falloff_type;
127         float falloff_softness;
128         float radius;
129         short source;
130         short pad0;
131
132         /** psys_color_source */
133         short color_source;
134         short ob_color_source;
135
136         int totpoints;
137
138         /** for 'Object' or 'Particle system' type - source object */
139         struct Object *object;
140         /** index+1 in ob.particlesystem, non-ID pointer not allowed */
141         int psys;
142         /** cache points in worldspace, object space, ... ? */
143         short psys_cache_space;
144         /** cache points in worldspace, object space, ... ? */
145         short ob_cache_space;
146         /** vertex attribute layer for color source, MAX_CUSTOMDATA_LAYER_NAME */
147         char vertex_attribute_name[64];
148
149         /** The acceleration tree containing points. */
150         void *point_tree;
151         /** Dynamically allocated extra for extra information, like particle age. */
152         float *point_data;
153
154         float noise_size;
155         short noise_depth;
156         short noise_influence;
157         short noise_basis;
158         short pad1[3];
159         float noise_fac;
160
161         float speed_scale, falloff_speed_scale, pad2;
162         /** For time -> color */
163         struct ColorBand *coba;
164
165         /** Falloff density curve. */
166         struct CurveMapping *falloff_curve;
167 } PointDensity;
168
169 typedef struct Tex {
170         ID id;
171         /** Animation data (must be immediately after id for utilities to use it). */
172         struct AnimData *adt;
173
174         float noisesize, turbul;
175         float bright, contrast, saturation, rfac, gfac, bfac;
176         float filtersize, pad2;
177
178         /* newnoise: musgrave parameters */
179         float mg_H, mg_lacunarity, mg_octaves, mg_offset, mg_gain;
180
181         /* newnoise: distorted noise amount, musgrave & voronoi output scale */
182         float dist_amount, ns_outscale;
183
184         /* newnoise: voronoi nearest neighbor weights, minkovsky exponent,
185          * distance metric & color type */
186         float vn_w1;
187         float vn_w2;
188         float vn_w3;
189         float vn_w4;
190         float vn_mexp;
191         short vn_distm, vn_coltype;
192
193         /* noisedepth MUST be <= 30 else we get floating point exceptions */
194         short noisedepth, noisetype;
195
196         /* newnoise: noisebasis type for clouds/marble/etc, noisebasis2 only used for distorted noise */
197         short noisebasis, noisebasis2;
198
199         short imaflag, flag;
200         short type, stype;
201
202         float cropxmin, cropymin, cropxmax, cropymax;
203         int texfilter;
204         int afmax;      // anisotropic filter maximum value, ewa -> max eccentricity, feline -> max probes
205         short xrepeat, yrepeat;
206         short extend;
207
208         /* variables disabled, moved to struct iuser */
209         short _pad0;
210         int len;
211         int frames, offset, sfra;
212
213         float checkerdist, nabla;
214         float pad1;
215
216         struct ImageUser iuser;
217
218         struct bNodeTree *nodetree;
219         /* old animation system, deprecated for 2.5 */
220         struct Ipo *ipo  DNA_DEPRECATED;
221         struct Image *ima;
222         struct ColorBand *coba;
223         struct PreviewImage *preview;
224
225         char use_nodes;
226         char pad[7];
227
228 } Tex;
229
230 /* used for mapping and texture nodes. note: rot is now in radians */
231
232 typedef struct TexMapping {
233         float loc[3], rot[3], size[3];
234         int flag;
235         char projx, projy, projz, mapping;
236         int type;
237
238         float mat[4][4];
239         float min[3], max[3];
240         struct Object *ob;
241
242 } TexMapping;
243
244 typedef struct ColorMapping {
245         struct ColorBand coba;
246
247         float bright, contrast, saturation;
248         int flag;
249
250         float blend_color[3];
251         float blend_factor;
252         int blend_type, pad[3];
253 } ColorMapping;
254
255 /* texmap->flag */
256 #define TEXMAP_CLIP_MIN         1
257 #define TEXMAP_CLIP_MAX         2
258 #define TEXMAP_UNIT_MATRIX      4
259
260 /* texmap->type */
261 #define TEXMAP_TYPE_POINT               0
262 #define TEXMAP_TYPE_TEXTURE             1
263 #define TEXMAP_TYPE_VECTOR              2
264 #define TEXMAP_TYPE_NORMAL              3
265
266 /* colormap->flag */
267 #define COLORMAP_USE_RAMP 1
268
269 /* **************** TEX ********************* */
270
271 /* type */
272 #define TEX_CLOUDS              1
273 #define TEX_WOOD                2
274 #define TEX_MARBLE              3
275 #define TEX_MAGIC               4
276 #define TEX_BLEND               5
277 #define TEX_STUCCI              6
278 #define TEX_NOISE               7
279 #define TEX_IMAGE               8
280 //#define TEX_PLUGIN            9 /* Deprecated */
281 //#define TEX_ENVMAP            10 /* Deprecated */
282 #define TEX_MUSGRAVE    11
283 #define TEX_VORONOI             12
284 #define TEX_DISTNOISE   13
285 //#define TEX_POINTDENSITY      14 /* Deprecated */
286 //#define TEX_VOXELDATA         15 /* Deprecated */
287 //#define TEX_OCEAN                     16 /* Deprecated */
288
289 /* musgrave stype */
290 #define TEX_MFRACTAL            0
291 #define TEX_RIDGEDMF            1
292 #define TEX_HYBRIDMF            2
293 #define TEX_FBM                         3
294 #define TEX_HTERRAIN            4
295
296 /* newnoise: noisebasis 1 & 2 */
297 #define TEX_BLENDER                     0
298 #define TEX_STDPERLIN           1
299 #define TEX_NEWPERLIN           2
300 #define TEX_VORONOI_F1          3
301 #define TEX_VORONOI_F2          4
302 #define TEX_VORONOI_F3          5
303 #define TEX_VORONOI_F4          6
304 #define TEX_VORONOI_F2F1        7
305 #define TEX_VORONOI_CRACKLE             8
306 #define TEX_CELLNOISE           14
307
308 /* newnoise: Voronoi distance metrics, vn_distm */
309 #define TEX_DISTANCE            0
310 #define TEX_DISTANCE_SQUARED            1
311 #define TEX_MANHATTAN           2
312 #define TEX_CHEBYCHEV           3
313 #define TEX_MINKOVSKY_HALF              4
314 #define TEX_MINKOVSKY_FOUR              5
315 #define TEX_MINKOVSKY           6
316
317 /* imaflag */
318 #define TEX_INTERPOL    (1 << 0)
319 #define TEX_USEALPHA    (1 << 1)
320 #define TEX_MIPMAP              (1 << 2)
321 #define TEX_IMAROT              (1 << 4)
322 #define TEX_CALCALPHA   (1 << 5)
323 #define TEX_NORMALMAP   (1 << 11)
324 #define TEX_GAUSS_MIP   (1 << 12)
325 #define TEX_FILTER_MIN  (1 << 13)
326 #define TEX_DERIVATIVEMAP       (1 << 14)
327
328 /* texfilter */
329 // TXF_BOX -> blender's old texture filtering method
330 #define TXF_BOX                 0
331 #define TXF_EWA                 1
332 #define TXF_FELINE              2
333 #define TXF_AREA                3
334
335 /* flag */
336 #define TEX_COLORBAND       (1 << 0)
337 #define TEX_FLIPBLEND       (1 << 1)
338 #define TEX_NEGALPHA        (1 << 2)
339 #define TEX_CHECKER_ODD     (1 << 3)
340 #define TEX_CHECKER_EVEN    (1 << 4)
341 #define TEX_PRV_ALPHA       (1 << 5)
342 #define TEX_PRV_NOR         (1 << 6)
343 #define TEX_REPEAT_XMIR     (1 << 7)
344 #define TEX_REPEAT_YMIR     (1 << 8)
345 #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)
346 #define TEX_DS_EXPAND       (1 << 9)
347 #define TEX_NO_CLAMP        (1 << 10)
348
349 /* extend (starts with 1 because of backward comp.) */
350 #define TEX_EXTEND              1
351 #define TEX_CLIP                2
352 #define TEX_REPEAT              3
353 #define TEX_CLIPCUBE    4
354 #define TEX_CHECKER             5
355
356 /* noisetype */
357 #define TEX_NOISESOFT   0
358 #define TEX_NOISEPERL   1
359
360 /* tex->noisebasis2 in texture.c - wood waveforms */
361 #define TEX_SIN                 0
362 #define TEX_SAW                 1
363 #define TEX_TRI                 2
364
365 /* tex->stype in texture.c - wood types */
366 #define TEX_BAND                0
367 #define TEX_RING                1
368 #define TEX_BANDNOISE   2
369 #define TEX_RINGNOISE   3
370
371 /* tex->stype in texture.c - cloud types */
372 #define TEX_DEFAULT             0
373 #define TEX_COLOR               1
374
375 /* tex->stype in texture.c - marble types */
376 #define TEX_SOFT                0
377 #define TEX_SHARP               1
378 #define TEX_SHARPER             2
379
380 /* tex->stype in texture.c - blend types */
381 #define TEX_LIN                 0
382 #define TEX_QUAD                1
383 #define TEX_EASE                2
384 #define TEX_DIAG                3
385 #define TEX_SPHERE              4
386 #define TEX_HALO                5
387 #define TEX_RAD                 6
388
389 /* tex->stype in texture.c - stucci types */
390 #define TEX_PLASTIC             0
391 #define TEX_WALLIN              1
392 #define TEX_WALLOUT             2
393
394 /* tex->stype in texture.c - voronoi types */
395 #define TEX_INTENSITY   0
396 #define TEX_COL1                1
397 #define TEX_COL2                2
398 #define TEX_COL3                3
399
400 /* mtex->normapspace */
401 #define MTEX_NSPACE_CAMERA      0
402 #define MTEX_NSPACE_WORLD       1
403 #define MTEX_NSPACE_OBJECT      2
404 #define MTEX_NSPACE_TANGENT     3
405
406 /* wrap */
407 #define MTEX_FLAT               0
408 #define MTEX_CUBE               1
409 #define MTEX_TUBE               2
410 #define MTEX_SPHERE             3
411
412 /* return value */
413 #define TEX_INT         0
414 #define TEX_RGB         1
415 #define TEX_NOR         2
416
417 /* pr_texture in material, world, lamp, */
418 #define TEX_PR_TEXTURE  0
419 #define TEX_PR_OTHER    1
420 #define TEX_PR_BOTH             2
421
422 /* **************** MTEX ********************* */
423
424 /* proj */
425 #define PROJ_N                  0
426 #define PROJ_X                  1
427 #define PROJ_Y                  2
428 #define PROJ_Z                  3
429
430 /* texflag */
431 #define MTEX_RGBTOINT           (1 << 0)
432 #define MTEX_STENCIL            (1 << 1)
433 #define MTEX_NEGATIVE           (1 << 2)
434 #define MTEX_ALPHAMIX           (1 << 3)
435 #define MTEX_VIEWSPACE          (1 << 4)
436 #define MTEX_DUPLI_MAPTO        (1 << 5)
437 #define MTEX_OB_DUPLI_ORIG      (1 << 6)
438 #define MTEX_COMPAT_BUMP        (1 << 7)
439 #define MTEX_3TAP_BUMP          (1 << 8)
440 #define MTEX_5TAP_BUMP          (1 << 9)
441 #define MTEX_BUMP_OBJECTSPACE   (1 << 10)
442 #define MTEX_BUMP_TEXTURESPACE  (1 << 11)
443 /* #define MTEX_BUMP_FLIPPED    (1 << 12) */ /* UNUSED */
444 #define MTEX_TIPS                               (1 << 12)  /* should use with_freestyle flag?  */
445 #define MTEX_BICUBIC_BUMP               (1 << 13)
446 #define MTEX_MAPTO_BOUNDS               (1 << 14)
447
448 /* blendtype */
449 #define MTEX_BLEND              0
450 #define MTEX_MUL                1
451 #define MTEX_ADD                2
452 #define MTEX_SUB                3
453 #define MTEX_DIV                4
454 #define MTEX_DARK               5
455 #define MTEX_DIFF               6
456 #define MTEX_LIGHT              7
457 #define MTEX_SCREEN             8
458 #define MTEX_OVERLAY    9
459 #define MTEX_BLEND_HUE          10
460 #define MTEX_BLEND_SAT          11
461 #define MTEX_BLEND_VAL          12
462 #define MTEX_BLEND_COLOR        13
463 #define MTEX_SOFT_LIGHT     15
464 #define MTEX_LIN_LIGHT      16
465
466 /* brush_map_mode */
467 #define MTEX_MAP_MODE_VIEW     0
468 #define MTEX_MAP_MODE_TILED    1
469 #define MTEX_MAP_MODE_3D       2
470 #define MTEX_MAP_MODE_AREA     3
471 #define MTEX_MAP_MODE_RANDOM   4
472 #define MTEX_MAP_MODE_STENCIL  5
473
474 /* brush_angle_mode */
475 #define MTEX_ANGLE_RANDOM      1
476 #define MTEX_ANGLE_RAKE        2
477
478 /* **************** ColorBand ********************* */
479
480 /* colormode */
481 enum {
482         COLBAND_BLEND_RGB   = 0,
483         COLBAND_BLEND_HSV   = 1,
484         COLBAND_BLEND_HSL   = 2,
485 };
486
487 /* interpolation */
488 enum {
489         COLBAND_INTERP_LINEAR       = 0,
490         COLBAND_INTERP_EASE         = 1,
491         COLBAND_INTERP_B_SPLINE     = 2,
492         COLBAND_INTERP_CARDINAL     = 3,
493         COLBAND_INTERP_CONSTANT     = 4,
494 };
495
496 /* color interpolation */
497 enum {
498         COLBAND_HUE_NEAR    = 0,
499         COLBAND_HUE_FAR     = 1,
500         COLBAND_HUE_CW      = 2,
501         COLBAND_HUE_CCW     = 3,
502 };
503
504 /* **************** PointDensity ********************* */
505
506 /* source */
507 #define TEX_PD_PSYS                     0
508 #define TEX_PD_OBJECT           1
509 #define TEX_PD_FILE                     2
510
511 /* falloff_type */
512 #define TEX_PD_FALLOFF_STD              0
513 #define TEX_PD_FALLOFF_SMOOTH   1
514 #define TEX_PD_FALLOFF_SOFT             2
515 #define TEX_PD_FALLOFF_CONSTANT 3
516 #define TEX_PD_FALLOFF_ROOT             4
517 #define TEX_PD_FALLOFF_PARTICLE_AGE 5
518 #define TEX_PD_FALLOFF_PARTICLE_VEL 6
519
520 /* psys_cache_space */
521 #define TEX_PD_OBJECTLOC        0
522 #define TEX_PD_OBJECTSPACE      1
523 #define TEX_PD_WORLDSPACE       2
524
525 /* flag */
526 #define TEX_PD_TURBULENCE               1
527 #define TEX_PD_FALLOFF_CURVE    2
528
529 /* noise_influence */
530 #define TEX_PD_NOISE_STATIC             0
531 /* #define TEX_PD_NOISE_VEL             1 */ /* Deprecated */
532 /* #define TEX_PD_NOISE_AGE             2 */ /* Deprecated */
533 /* #define TEX_PD_NOISE_TIME    3 */ /* Deprecated */
534
535 /* color_source */
536 enum {
537         TEX_PD_COLOR_CONSTANT   = 0,
538         /* color_source: particles */
539         TEX_PD_COLOR_PARTAGE    = 1,
540         TEX_PD_COLOR_PARTSPEED  = 2,
541         TEX_PD_COLOR_PARTVEL    = 3,
542         /* color_source: vertices */
543         TEX_PD_COLOR_VERTCOL    = 1,
544         TEX_PD_COLOR_VERTWEIGHT = 2,
545         TEX_PD_COLOR_VERTNOR    = 3,
546 };
547
548 #define POINT_DATA_VEL          1
549 #define POINT_DATA_LIFE         2
550 #define POINT_DATA_COLOR        4
551
552 #ifdef __cplusplus
553 }
554 #endif
555
556 #endif