Improved layout of voronoi texture. There was some strange empty space.
[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];
57         
58         short texflag, colormodel, pmapto, pmaptoneg;
59         short normapspace, which_output, pad[2];
60         float r, g, b, k;
61         float def_var, rt;
62         
63         float colfac, norfac, varfac;
64         float dispfac; 
65         float warpfac;
66         
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 Tex {
132         ID id;
133         struct AnimData *adt;   /* animation data (must be immediately after id for utilities to use it) */ 
134         
135         float noisesize, turbul;
136         float bright, contrast, rfac, gfac, bfac;
137         float filtersize;
138
139         /* newnoise: musgrave parameters */
140         float mg_H, mg_lacunarity, mg_octaves, mg_offset, mg_gain;
141
142         /* newnoise: distorted noise amount, musgrave & voronoi ouput scale */
143         float dist_amount, ns_outscale;
144
145         /* newnoise: voronoi nearest neighbour weights, minkovsky exponent, distance metric & color type */
146         float vn_w1;
147         float vn_w2;
148         float vn_w3;
149         float vn_w4;
150         float vn_mexp;
151         short vn_distm, vn_coltype;
152
153         short noisedepth, noisetype;
154
155         /* newnoise: noisebasis type for clouds/marble/etc, noisebasis2 only used for distorted noise */
156         short noisebasis, noisebasis2;
157
158         short imaflag, flag;
159         short type, stype;
160         
161         float cropxmin, cropymin, cropxmax, cropymax;
162         int texfilter;
163         int afmax;      // anisotropic filter maximum value, ewa -> max eccentricity, feline -> max probes
164         short xrepeat, yrepeat;
165         short extend;
166
167         /* variables disabled, moved to struct iuser */
168         short fie_ima;
169         int len;
170         int frames, offset, sfra;
171         
172         float checkerdist, nabla;
173         float norfac;
174         
175         struct ImageUser iuser;
176         
177         struct bNodeTree *nodetree;
178         struct Ipo *ipo;                                // XXX depreceated... old animation system
179         struct Image *ima;
180         struct PluginTex *plugin;
181         struct ColorBand *coba;
182         struct EnvMap *env;
183         struct PreviewImage * preview;
184         
185         char use_nodes;
186         char pad[7];
187         
188 } Tex;
189
190 /* used for mapping node. note: rot is in degrees */
191
192 typedef struct TexMapping {
193         float loc[3], rot[3], size[3];
194         int flag;
195         
196         float mat[4][4];
197         float min[3], max[3];
198         struct Object *ob;
199
200 } TexMapping;
201
202 /* texmap->flag */
203 #define TEXMAP_CLIP_MIN 1
204 #define TEXMAP_CLIP_MAX 2
205
206
207 /* **************** TEX ********************* */
208
209 /* type */
210 #define TEX_CLOUDS              1
211 #define TEX_WOOD                2
212 #define TEX_MARBLE              3
213 #define TEX_MAGIC               4
214 #define TEX_BLEND               5
215 #define TEX_STUCCI              6
216 #define TEX_NOISE               7
217 #define TEX_IMAGE               8
218 #define TEX_PLUGIN              9
219 #define TEX_ENVMAP              10
220 #define TEX_MUSGRAVE    11
221 #define TEX_VORONOI             12
222 #define TEX_DISTNOISE   13
223
224 /* musgrave stype */
225 #define TEX_MFRACTAL            0
226 #define TEX_RIDGEDMF            1
227 #define TEX_HYBRIDMF            2
228 #define TEX_FBM                         3
229 #define TEX_HTERRAIN            4
230
231 /* newnoise: noisebasis 1 & 2 */
232 #define TEX_BLENDER                     0
233 #define TEX_STDPERLIN           1
234 #define TEX_NEWPERLIN           2
235 #define TEX_VORONOI_F1          3
236 #define TEX_VORONOI_F2          4
237 #define TEX_VORONOI_F3          5
238 #define TEX_VORONOI_F4          6
239 #define TEX_VORONOI_F2F1        7
240 #define TEX_VORONOI_CRACKLE             8
241 #define TEX_CELLNOISE           14
242
243 /* newnoise: Voronoi distance metrics, vn_distm */
244 #define TEX_DISTANCE            0
245 #define TEX_DISTANCE_SQUARED            1
246 #define TEX_MANHATTAN           2
247 #define TEX_CHEBYCHEV           3
248 #define TEX_MINKOVSKY_HALF              4
249 #define TEX_MINKOVSKY_FOUR              5
250 #define TEX_MINKOVSKY           6
251
252 /* imaflag */
253 #define TEX_INTERPOL    1
254 #define TEX_USEALPHA    2
255 #define TEX_MIPMAP              4
256 #define TEX_IMAROT              16
257 #define TEX_CALCALPHA   32
258 #define TEX_NORMALMAP   2048
259 #define TEX_GAUSS_MIP   4096
260 #define TEX_FILTER_MIN  8192
261
262 /* texfilter */
263 // TXF_BOX -> blender's old texture filtering method
264 #define TXF_BOX                 0
265 #define TXF_EWA                 1
266 #define TXF_FELINE              2
267 #define TXF_AREA                3
268 // TXF_SAT only available when mipmaps disabled
269 #define TXF_SAT                 4
270
271 /* imaflag unused, only for version check */
272 #define TEX_FIELDS_             8
273 #define TEX_ANIMCYCLIC_ 64
274 #define TEX_ANIM5_              128
275 #define TEX_ANTIALI_    256
276 #define TEX_ANTISCALE_  512
277 #define TEX_STD_FIELD_  1024
278
279 /* flag */
280 #define TEX_COLORBAND           1
281 #define TEX_FLIPBLEND           2
282 #define TEX_NEGALPHA            4
283 #define TEX_CHECKER_ODD         8
284 #define TEX_CHECKER_EVEN        16
285 #define TEX_PRV_ALPHA           32
286 #define TEX_PRV_NOR                     64
287 #define TEX_REPEAT_XMIR         128
288 #define TEX_REPEAT_YMIR         256
289 #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 ) 
290
291 /* extend (starts with 1 because of backward comp.) */
292 #define TEX_EXTEND              1
293 #define TEX_CLIP                2
294 #define TEX_REPEAT              3
295 #define TEX_CLIPCUBE    4
296 #define TEX_CHECKER             5
297
298 /* noisetype */
299 #define TEX_NOISESOFT   0
300 #define TEX_NOISEPERL   1
301
302 /* tex->noisebasis2 in texture.c - wood waveforms */
303 #define TEX_SIN                 0
304 #define TEX_SAW                 1
305 #define TEX_TRI                 2
306
307 /* tex->stype in texture.c - wood types */
308 #define TEX_BAND                0
309 #define TEX_RING                1
310 #define TEX_BANDNOISE   2
311 #define TEX_RINGNOISE   3
312
313 /* tex->stype in texture.c - cloud types */
314 #define TEX_DEFAULT             0
315 #define TEX_COLOR               1
316
317 /* tex->stype in texture.c - marble types */
318 #define TEX_SOFT                0
319 #define TEX_SHARP               1
320 #define TEX_SHARPER             2
321
322 /* tex->stype in texture.c - blend types */
323 #define TEX_LIN                 0
324 #define TEX_QUAD                1
325 #define TEX_EASE                2
326 #define TEX_DIAG                3
327 #define TEX_SPHERE              4
328 #define TEX_HALO                5
329 #define TEX_RAD                 6
330
331 /* tex->stype in texture.c - stucci types */
332 #define TEX_PLASTIC             0
333 #define TEX_WALLIN              1
334 #define TEX_WALLOUT             2
335
336 /* tex->stype in texture.c - voronoi types */
337 #define TEX_INTENSITY   0
338 #define TEX_COL1                1
339 #define TEX_COL2                2
340 #define TEX_COL3                3
341
342 /* mtex->normapspace */
343 #define MTEX_NSPACE_CAMERA      0
344 #define MTEX_NSPACE_WORLD       1
345 #define MTEX_NSPACE_OBJECT      2
346 #define MTEX_NSPACE_TANGENT     3
347
348 /* wrap */
349 #define MTEX_FLAT               0
350 #define MTEX_CUBE               1
351 #define MTEX_TUBE               2
352 #define MTEX_SPHERE             3
353
354 /* return value */
355 #define TEX_INT         0
356 #define TEX_RGB         1
357 #define TEX_NOR         2
358
359 /* pr_texture in material, world, lamp, */
360 #define TEX_PR_TEXTURE  0
361 #define TEX_PR_OTHER    1
362 #define TEX_PR_BOTH             2
363
364 /* **************** MTEX ********************* */
365
366 /* proj */
367 #define PROJ_N                  0
368 #define PROJ_X                  1
369 #define PROJ_Y                  2
370 #define PROJ_Z                  3
371
372 /* texflag */
373 #define MTEX_RGBTOINT           1
374 #define MTEX_STENCIL            2
375 #define MTEX_NEGATIVE           4
376 #define MTEX_ALPHAMIX           8
377 #define MTEX_VIEWSPACE          16
378 #define MTEX_DUPLI_MAPTO        32
379 #define MTEX_OB_DUPLI_ORIG      64
380 #define MTEX_NEW_BUMP           128
381
382 /* blendtype */
383 #define MTEX_BLEND              0
384 #define MTEX_MUL                1
385 #define MTEX_ADD                2
386 #define MTEX_SUB                3
387 #define MTEX_DIV                4
388 #define MTEX_DARK               5
389 #define MTEX_DIFF               6
390 #define MTEX_LIGHT              7
391 #define MTEX_SCREEN             8
392 #define MTEX_OVERLAY    9
393 #define MTEX_BLEND_HUE          10
394 #define MTEX_BLEND_SAT          11
395 #define MTEX_BLEND_VAL          12
396 #define MTEX_BLEND_COLOR        13
397 #define MTEX_NUM_BLENDTYPES     14
398
399 /* **************** EnvMap ********************* */
400
401 /* type */
402 #define ENV_CUBE        0
403 #define ENV_PLANE       1
404 #define ENV_SPHERE      2
405
406 /* stype */
407 #define ENV_STATIC      0
408 #define ENV_ANIM        1
409 #define ENV_LOAD        2
410
411 /* ok */
412 #define ENV_NORMAL      1
413 #define ENV_OSA         2
414
415 #endif
416