NLA SoC: Merge from 2.5
[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];
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, vn_w2, vn_w3, vn_w4, vn_mexp;
147         short vn_distm, vn_coltype;
148
149         short noisedepth, noisetype;
150
151         /* newnoise: noisebasis type for clouds/marble/etc, noisebasis2 only used for distorted noise */
152         short noisebasis, noisebasis2;
153         
154         short imaflag, flag;
155         short type, stype;
156         
157         float cropxmin, cropymin, cropxmax, cropymax;
158         short xrepeat, yrepeat;
159         short extend;
160
161         /* variables disabled, moved to struct iuser */
162         short fie_ima;
163         int len;
164         int frames, offset, sfra;
165         
166         float checkerdist, nabla;
167         float norfac;
168         
169         struct ImageUser iuser;
170         
171         struct bNodeTree *nodetree;
172         struct Ipo *ipo;                                // XXX depreceated... old animation system
173         struct Image *ima;
174         struct PluginTex *plugin;
175         struct ColorBand *coba;
176         struct EnvMap *env;
177         struct PreviewImage * preview;
178         
179         char use_nodes;
180         char pad[7];
181         
182 } Tex;
183
184 /* used for mapping node. note: rot is in degrees */
185
186 typedef struct TexMapping {
187         float loc[3], rot[3], size[3];
188         int flag;
189         
190         float mat[4][4];
191         float min[3], max[3];
192         struct Object *ob;
193
194 } TexMapping;
195
196 /* texmap->flag */
197 #define TEXMAP_CLIP_MIN 1
198 #define TEXMAP_CLIP_MAX 2
199
200
201 /* **************** TEX ********************* */
202
203 /* type */
204 #define TEX_CLOUDS              1
205 #define TEX_WOOD                2
206 #define TEX_MARBLE              3
207 #define TEX_MAGIC               4
208 #define TEX_BLEND               5
209 #define TEX_STUCCI              6
210 #define TEX_NOISE               7
211 #define TEX_IMAGE               8
212 #define TEX_PLUGIN              9
213 #define TEX_ENVMAP              10
214 #define TEX_MUSGRAVE    11
215 #define TEX_VORONOI             12
216 #define TEX_DISTNOISE   13
217
218 /* musgrave stype */
219 #define TEX_MFRACTAL            0
220 #define TEX_RIDGEDMF            1
221 #define TEX_HYBRIDMF            2
222 #define TEX_FBM                         3
223 #define TEX_HTERRAIN            4
224
225 /* newnoise: noisebasis 1 & 2 */
226 #define TEX_BLENDER                     0
227 #define TEX_STDPERLIN           1
228 #define TEX_NEWPERLIN           2
229 #define TEX_VORONOI_F1          3
230 #define TEX_VORONOI_F2          4
231 #define TEX_VORONOI_F3          5
232 #define TEX_VORONOI_F4          6
233 #define TEX_VORONOI_F2F1        7
234 #define TEX_VORONOI_CRACKLE             8
235 #define TEX_CELLNOISE           14
236
237 /* newnoise: Voronoi distance metrics, vn_distm */
238 #define TEX_DISTANCE            0
239 #define TEX_DISTANCE_SQUARED            1
240 #define TEX_MANHATTAN           2
241 #define TEX_CHEBYCHEV           3
242 #define TEX_MINKOVSKY_HALF              4
243 #define TEX_MINKOVSKY_FOUR              5
244 #define TEX_MINKOVSKY           6
245
246 /* imaflag */
247 #define TEX_INTERPOL    1
248 #define TEX_USEALPHA    2
249 #define TEX_MIPMAP              4
250 #define TEX_IMAROT              16
251 #define TEX_CALCALPHA   32
252 #define TEX_NORMALMAP   2048
253 #define TEX_GAUSS_MIP   4096
254 #define TEX_FILTER_MIN  8192
255
256 /* imaflag unused, only for version check */
257 #define TEX_FIELDS_             8
258 #define TEX_ANIMCYCLIC_ 64
259 #define TEX_ANIM5_              128
260 #define TEX_ANTIALI_    256
261 #define TEX_ANTISCALE_  512
262 #define TEX_STD_FIELD_  1024
263
264 /* flag */
265 #define TEX_COLORBAND           1
266 #define TEX_FLIPBLEND           2
267 #define TEX_NEGALPHA            4
268 #define TEX_CHECKER_ODD         8
269 #define TEX_CHECKER_EVEN        16
270 #define TEX_PRV_ALPHA           32
271 #define TEX_PRV_NOR                     64
272 #define TEX_REPEAT_XMIR         128
273 #define TEX_REPEAT_YMIR         256
274 #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 ) 
275
276 /* extend (starts with 1 because of backward comp.) */
277 #define TEX_EXTEND              1
278 #define TEX_CLIP                2
279 #define TEX_REPEAT              3
280 #define TEX_CLIPCUBE    4
281 #define TEX_CHECKER             5
282
283 /* noisetype */
284 #define TEX_NOISESOFT   0
285 #define TEX_NOISEPERL   1
286
287 /* tex->noisebasis2 in texture.c - wood waveforms */
288 #define TEX_SIN                 0
289 #define TEX_SAW                 1
290 #define TEX_TRI                 2
291
292 /* tex->stype in texture.c - wood types */
293 #define TEX_BAND                0
294 #define TEX_RING                1
295 #define TEX_BANDNOISE   2
296 #define TEX_RINGNOISE   3
297
298 /* tex->stype in texture.c - cloud types */
299 #define TEX_DEFAULT             0
300 #define TEX_COLOR               1
301
302 /* tex->stype in texture.c - marble types */
303 #define TEX_SOFT                0
304 #define TEX_SHARP               1
305 #define TEX_SHARPER             2
306
307 /* tex->stype in texture.c - blend types */
308 #define TEX_LIN                 0
309 #define TEX_QUAD                1
310 #define TEX_EASE                2
311 #define TEX_DIAG                3
312 #define TEX_SPHERE              4
313 #define TEX_HALO                5
314 #define TEX_RAD                 6
315
316 /* tex->stype in texture.c - stucci types */
317 #define TEX_PLASTIC             0
318 #define TEX_WALLIN              1
319 #define TEX_WALLOUT             2
320
321 /* tex->stype in texture.c - voronoi types */
322 #define TEX_INTENSITY   0
323 #define TEX_COL1                1
324 #define TEX_COL2                2
325 #define TEX_COL3                3
326
327 /* mtex->normapspace */
328 #define MTEX_NSPACE_CAMERA      0
329 #define MTEX_NSPACE_WORLD       1
330 #define MTEX_NSPACE_OBJECT      2
331 #define MTEX_NSPACE_TANGENT     3
332
333 /* wrap */
334 #define MTEX_FLAT               0
335 #define MTEX_CUBE               1
336 #define MTEX_TUBE               2
337 #define MTEX_SPHERE             3
338
339 /* return value */
340 #define TEX_INT         0
341 #define TEX_RGB         1
342 #define TEX_NOR         2
343
344 /* **************** MTEX ********************* */
345
346 /* proj */
347 #define PROJ_N                  0
348 #define PROJ_X                  1
349 #define PROJ_Y                  2
350 #define PROJ_Z                  3
351
352 /* texflag */
353 #define MTEX_RGBTOINT           1
354 #define MTEX_STENCIL            2
355 #define MTEX_NEGATIVE           4
356 #define MTEX_ALPHAMIX           8
357 #define MTEX_VIEWSPACE          16
358 #define MTEX_DUPLI_MAPTO        32
359 #define MTEX_OB_DUPLI_ORIG      64
360
361 /* blendtype */
362 #define MTEX_BLEND              0
363 #define MTEX_MUL                1
364 #define MTEX_ADD                2
365 #define MTEX_SUB                3
366 #define MTEX_DIV                4
367 #define MTEX_DARK               5
368 #define MTEX_DIFF               6
369 #define MTEX_LIGHT              7
370 #define MTEX_SCREEN             8
371 #define MTEX_OVERLAY    9
372 #define MTEX_BLEND_HUE          10
373 #define MTEX_BLEND_SAT          11
374 #define MTEX_BLEND_VAL          12
375 #define MTEX_BLEND_COLOR        13
376 #define MTEX_NUM_BLENDTYPES     14
377
378 /* **************** EnvMap ********************* */
379
380 /* type */
381 #define ENV_CUBE        0
382 #define ENV_PLANE       1
383 #define ENV_SPHERE      2
384
385 /* stype */
386 #define ENV_STATIC      0
387 #define ENV_ANIM        1
388 #define ENV_LOAD        2
389
390 /* ok */
391 #define ENV_NORMAL      1
392 #define ENV_OSA         2
393
394 #endif
395