Render Baking
[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/BL DUAL 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. The Blender
12  * Foundation also sells licenses for use in proprietary software under
13  * the Blender License.  See http://www.blender.org/BL/ for information
14  * about this.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software Foundation,
23  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24  *
25  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
26  * All rights reserved.
27  *
28  * The Original Code is: all of this file.
29  *
30  * Contributor(s): none yet.
31  *
32  * ***** END GPL/BL DUAL LICENSE BLOCK *****
33  */
34 #ifndef DNA_TEXTURE_TYPES_H
35 #define DNA_TEXTURE_TYPES_H
36
37 #include "DNA_ID.h"
38 #include "DNA_image_types.h"
39
40 struct Ipo;
41 struct PluginTex;
42 struct ColorBand;
43 struct EnvMap;
44 struct Object;
45 struct Tex;
46 struct Image;
47 struct PreviewImage;
48 struct ImBuf;
49
50 typedef struct MTex {
51
52         short texco, mapto, maptoneg, blendtype;
53         struct Object *object;
54         struct Tex *tex;
55         char uvname[32];
56         
57         char projx, projy, projz, mapping;
58         float ofs[3], size[3];
59         
60         short texflag, colormodel, pmapto, pmaptoneg;
61         short normapspace, pad[3];
62         float r, g, b, k;
63         float def_var, rt;
64         
65         float colfac, norfac, varfac;
66         float dispfac; 
67         float warpfac; 
68         
69 } MTex;
70
71 #ifndef DNA_USHORT_FIX
72 #define DNA_USHORT_FIX
73 /**
74  * @deprecated This typedef serves to avoid badly typed functions when
75  * @deprecated compiling while delivering a proper dna.c. Do not use
76  * @deprecated it in any case.
77  */
78 typedef unsigned short dna_ushort_fix;
79 #endif
80
81 typedef struct PluginTex {
82         char name[160];
83         void *handle;
84         
85         char *pname;
86         char *stnames;
87
88         int stypes;
89         int vars;
90         void *varstr;
91         float *result;
92         float *cfra;
93         
94         float data[32];
95
96         int (*doit)(void);
97         void (*instance_init)(void *);
98
99         /* should be void (*)(unsigned short)... patched */     
100         void (*callback)(dna_ushort_fix);
101         
102         int version, pad;
103 } PluginTex;
104
105 typedef struct CBData {
106         float r, g, b, a, pos;
107         int cur;
108 } CBData;
109
110 /* 32 = MAXCOLORBAND */
111 /* note that this has to remain a single struct, for UserDef */
112 typedef struct ColorBand {
113         short flag, tot, cur, ipotype;
114         CBData data[32];
115         
116 } ColorBand;
117
118 typedef struct EnvMap {
119         struct Object *object;
120         struct Image *ima;              /* type ENV_LOAD */
121         struct ImBuf *cube[6];          /* these images are dynamic, not part of the main struct */
122         float imat[4][4];
123         float obimat[3][3];
124         short type, stype;
125         float clipsta, clipend;
126         float viewscale;        /* viewscale is for planar envmaps to zoom in or out */
127         unsigned int notlay;
128         short cuberes, depth;
129         int ok, lastframe;
130         short recalc, lastsize;
131 } EnvMap;
132
133 typedef struct Tex {
134         ID id;
135         
136         float noisesize, turbul;
137         float bright, contrast, rfac, gfac, bfac;
138         float filtersize;
139
140         /* newnoise: musgrave parameters */
141         float mg_H, mg_lacunarity, mg_octaves, mg_offset, mg_gain;
142
143         /* newnoise: distorted noise amount, musgrave & voronoi ouput scale */
144         float dist_amount, ns_outscale;
145
146         /* newnoise: voronoi nearest neighbour weights, minkovsky exponent, distance metric & color type */
147         float vn_w1, vn_w2, vn_w3, vn_w4, vn_mexp;
148         short vn_distm, vn_coltype;
149
150         short noisedepth, noisetype;
151
152         /* newnoise: noisebasis type for clouds/marble/etc, noisebasis2 only used for distorted noise */
153         short noisebasis, noisebasis2;
154         
155         short imaflag, flag;
156         short type, stype;
157         
158         float cropxmin, cropymin, cropxmax, cropymax;
159         short xrepeat, yrepeat;
160         short extend;
161
162         /* variables disabled, moved to struct iuser */
163         short fie_ima;
164         int len;
165         int frames, offset, sfra;
166         
167         float checkerdist, nabla;
168         float norfac;
169         
170         struct ImageUser iuser;
171         
172         struct Ipo *ipo;
173         struct Image *ima;
174         struct PluginTex *plugin;
175         struct ColorBand *coba;
176         struct EnvMap *env;
177         struct PreviewImage * preview;
178         
179 } Tex;
180
181 /* used for mapping node. note: rot is in degrees */
182
183 typedef struct TexMapping {
184         float loc[3], rot[3], size[3];
185         int flag;
186         
187         float mat[4][4];
188         float min[3], max[3];
189         struct Object *ob;
190
191 } TexMapping;
192
193 /* texmap->flag */
194 #define TEXMAP_CLIP_MIN 1
195 #define TEXMAP_CLIP_MAX 2
196
197
198 /* **************** TEX ********************* */
199
200 /* type */
201 #define TEX_CLOUDS              1
202 #define TEX_WOOD                2
203 #define TEX_MARBLE              3
204 #define TEX_MAGIC               4
205 #define TEX_BLEND               5
206 #define TEX_STUCCI              6
207 #define TEX_NOISE               7
208 #define TEX_IMAGE               8
209 #define TEX_PLUGIN              9
210 #define TEX_ENVMAP              10
211 #define TEX_MUSGRAVE    11
212 #define TEX_VORONOI             12
213 #define TEX_DISTNOISE   13
214
215 /* musgrave stype */
216 #define TEX_MFRACTAL            0
217 #define TEX_RIDGEDMF            1
218 #define TEX_HYBRIDMF            2
219 #define TEX_FBM                         3
220 #define TEX_HTERRAIN            4
221
222 /* newnoise: noisebasis 1 & 2 */
223 #define TEX_BLENDER                     0
224 #define TEX_STDPERLIN           1
225 #define TEX_NEWPERLIN           2
226 #define TEX_VORONOI_F1          3
227 #define TEX_VORONOI_F2          4
228 #define TEX_VORONOI_F3          5
229 #define TEX_VORONOI_F4          6
230 #define TEX_VORONOI_F2F1        7
231 #define TEX_VORONOI_CRACKLE             8
232 #define TEX_CELLNOISE           14
233
234 /* newnoise: Voronoi distance metrics, vn_distm */
235 #define TEX_DISTANCE            0
236 #define TEX_DISTANCE_SQUARED            1
237 #define TEX_MANHATTAN           2
238 #define TEX_CHEBYCHEV           3
239 #define TEX_MINKOVSKY_HALF              4
240 #define TEX_MINKOVSKY_FOUR              5
241 #define TEX_MINKOVSKY           6
242
243 /* imaflag */
244 #define TEX_INTERPOL    1
245 #define TEX_USEALPHA    2
246 #define TEX_MIPMAP              4
247 #define TEX_IMAROT              16
248 #define TEX_CALCALPHA   32
249 #define TEX_NORMALMAP   2048
250 #define TEX_GAUSS_MIP   4096
251
252 /* imaflag unused, only for version check */
253 #define TEX_FIELDS_             8
254 #define TEX_ANIMCYCLIC_ 64
255 #define TEX_ANIM5_              128
256 #define TEX_ANTIALI_    256
257 #define TEX_ANTISCALE_  512
258 #define TEX_STD_FIELD_  1024
259
260 /* flag */
261 #define TEX_COLORBAND           1
262 #define TEX_FLIPBLEND           2
263 #define TEX_NEGALPHA            4
264 #define TEX_CHECKER_ODD         8
265 #define TEX_CHECKER_EVEN        16
266 #define TEX_PRV_ALPHA           32
267 #define TEX_PRV_NOR                     64
268 #define TEX_REPEAT_XMIR         128
269 #define TEX_REPEAT_YMIR         256
270 #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 ) 
271
272 /* extend (starts with 1 because of backward comp.) */
273 #define TEX_EXTEND              1
274 #define TEX_CLIP                2
275 #define TEX_REPEAT              3
276 #define TEX_CLIPCUBE    4
277 #define TEX_CHECKER             5
278
279 /* noisetype */
280 #define TEX_NOISESOFT   0
281 #define TEX_NOISEPERL   1
282
283 /* tex->noisebasis2 in texture.c - wood waveforms */
284 #define TEX_SIN                 0
285 #define TEX_SAW                 1
286 #define TEX_TRI                 2
287
288 /* tex->stype in texture.c - wood types */
289 #define TEX_BAND                0
290 #define TEX_RING                1
291 #define TEX_BANDNOISE   2
292 #define TEX_RINGNOISE   3
293
294 /* tex->stype in texture.c - cloud types */
295 #define TEX_DEFAULT             0
296 #define TEX_COLOR               1
297
298 /* tex->stype in texture.c - marble types */
299 #define TEX_SOFT                0
300 #define TEX_SHARP               1
301 #define TEX_SHARPER             2
302
303 /* tex->stype in texture.c - blend types */
304 #define TEX_LIN                 0
305 #define TEX_QUAD                1
306 #define TEX_EASE                2
307 #define TEX_DIAG                3
308 #define TEX_SPHERE              4
309 #define TEX_HALO                5
310 #define TEX_RAD                 6
311
312 /* tex->stype in texture.c - stucci types */
313 #define TEX_PLASTIC             0
314 #define TEX_WALLIN              1
315 #define TEX_WALLOUT             2
316
317 /* tex->stype in texture.c - voronoi types */
318 #define TEX_INTENSITY   0
319 #define TEX_COL1                1
320 #define TEX_COL2                2
321 #define TEX_COL3                3
322
323 /* mtex->normapspace */
324 #define MTEX_NSPACE_CAMERA      0
325 #define MTEX_NSPACE_WORLD       1
326 #define MTEX_NSPACE_OBJECT      2
327 #define MTEX_NSPACE_TANGENT     3
328
329 /* wrap */
330 #define MTEX_FLAT               0
331 #define MTEX_CUBE               1
332 #define MTEX_TUBE               2
333 #define MTEX_SPHERE             3
334
335 /* return value */
336 #define TEX_INT         0
337 #define TEX_RGB         1
338 #define TEX_NOR         2
339
340 /* **************** MTEX ********************* */
341
342 /* proj */
343 #define PROJ_N                  0
344 #define PROJ_X                  1
345 #define PROJ_Y                  2
346 #define PROJ_Z                  3
347
348 /* texflag */
349 #define MTEX_RGBTOINT   1
350 #define MTEX_STENCIL    2
351 #define MTEX_NEGATIVE   4
352 #define MTEX_ALPHAMIX   8
353 #define MTEX_VIEWSPACE  16
354
355 /* blendtype */
356 #define MTEX_BLEND              0
357 #define MTEX_MUL                1
358 #define MTEX_ADD                2
359 #define MTEX_SUB                3
360 #define MTEX_DIV                4
361 #define MTEX_DARK               5
362 #define MTEX_DIFF               6
363 #define MTEX_LIGHT              7
364 #define MTEX_SCREEN             8
365 #define MTEX_OVERLAY    9
366
367 /* **************** EnvMap ********************* */
368
369 /* type */
370 #define ENV_CUBE        0
371 #define ENV_PLANE       1
372 #define ENV_SPHERE      2
373
374 /* stype */
375 #define ENV_STATIC      0
376 #define ENV_ANIM        1
377 #define ENV_LOAD        2
378
379 /* ok */
380 #define ENV_NORMAL      1
381 #define ENV_OSA         2
382
383 #endif
384