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