=Texture Plugins=
[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
39 struct Ipo;
40 struct PluginTex;
41 struct ColorBand;
42 struct EnvMap;
43 struct Object;
44 struct Tex;
45 struct Image;
46
47 typedef struct MTex {
48
49         short texco, mapto, maptoneg, blendtype;
50         struct Object *object;
51         struct Tex *tex;
52         
53         char projx, projy, projz, mapping;
54         float ofs[3], size[3];
55         
56         short texflag, colormodel;
57         float r, g, b, k;
58         float def_var;
59         
60         float colfac, norfac, varfac;
61         float dispfac; 
62         float warpfac; 
63         
64 } MTex;
65
66 #ifndef DNA_USHORT_FIX
67 #define DNA_USHORT_FIX
68 /**
69  * @deprecated This typedef serves to avoid badly typed functions when
70  * @deprecated compiling while delivering a proper dna.c. Do not use
71  * @deprecated it in any case.
72  */
73 typedef unsigned short dna_ushort_fix;
74 #endif
75
76 typedef struct PluginTex {
77         char name[160];
78         void *handle;
79         
80         char *pname;
81         char *stnames;
82
83         int stypes;
84         int vars;
85         void *varstr;
86         float *result;
87         float *cfra;
88         
89         float data[32];
90
91         int (*doit)(void);
92         void (*instance_init)(void *);
93
94         /* should be void (*)(unsigned short)... patched */     
95         void (*callback)(dna_ushort_fix);
96         
97         int version, pad;
98 } PluginTex;
99
100 typedef struct CBData {
101         float r, g, b, a, pos;
102         int cur;
103 } CBData;
104
105 /* 32 = MAXCOLORBAND */
106 typedef struct ColorBand {
107         short flag, tot, cur, ipotype;
108         CBData data[32];
109         
110 } ColorBand;
111
112 typedef struct EnvMap {
113         struct Object *object;
114         struct Image *ima;              /* type ENV_LOAD */
115         struct Image *cube[6];          /* these images are dynamic, not part of the main struct */
116         float imat[4][4];
117         float obimat[3][3];
118         short type, stype;
119         float clipsta, clipend;
120         float viewscale;        /* viewscale is for planar envmaps to zoom in or out */
121         unsigned int notlay;
122         short cuberes, depth;
123         int ok, lastframe;
124         short recalc, lastsize;
125 } EnvMap;
126
127 typedef struct Tex {
128         ID id;
129         
130         float noisesize, turbul;
131         float bright, contrast, rfac, gfac, bfac;
132         float filtersize;
133
134         /* newnoise: musgrave parameters */
135         float mg_H, mg_lacunarity, mg_octaves, mg_offset, mg_gain;
136
137         /* newnoise: distorted noise amount, musgrave & voronoi ouput scale */
138         float dist_amount, ns_outscale;
139
140         /* newnoise: voronoi nearest neighbour weights, minkovsky exponent, distance metric & color type */
141         float vn_w1, vn_w2, vn_w3, vn_w4, vn_mexp;
142         short vn_distm, vn_coltype;
143
144         short noisedepth, noisetype;
145
146         /* newnoise: noisebasis type for clouds/marble/etc, noisebasis2 only used for distorted noise */
147         short noisebasis, noisebasis2;
148         
149         short imaflag, flag;
150         short type, stype;
151         
152         float cropxmin, cropymin, cropxmax, cropymax;
153         short xrepeat, yrepeat;
154         short extend;
155         short fie_ima;
156         int len;
157         float checkerdist, nabla;
158         int frames, offset, sfra;
159         float norfac;
160         
161         struct Ipo *ipo;
162         struct Image *ima;
163         struct PluginTex *plugin;
164         struct ColorBand *coba;
165         struct EnvMap *env;
166         
167         int fradur[4][2];
168         
169 } Tex;
170
171 /* used for mapping node. note: rot is in degrees */
172
173 typedef struct TexMapping {
174         float loc[3], rot[3], size[3];
175         int flag;
176         
177         float mat[4][4];
178         float min[3], max[3];
179         struct Object *ob;
180
181 } TexMapping;
182
183 /* texmap->flag */
184 #define TEXMAP_CLIP_MIN 1
185 #define TEXMAP_CLIP_MAX 2
186
187
188 /* **************** TEX ********************* */
189
190 /* type */
191 #define TEX_CLOUDS              1
192 #define TEX_WOOD                2
193 #define TEX_MARBLE              3
194 #define TEX_MAGIC               4
195 #define TEX_BLEND               5
196 #define TEX_STUCCI              6
197 #define TEX_NOISE               7
198 #define TEX_IMAGE               8
199 #define TEX_PLUGIN              9
200 #define TEX_ENVMAP              10
201 #define TEX_MUSGRAVE    11
202 #define TEX_VORONOI             12
203 #define TEX_DISTNOISE   13
204
205 /* musgrave stype */
206 #define TEX_MFRACTAL            0
207 #define TEX_RIDGEDMF            1
208 #define TEX_HYBRIDMF            2
209 #define TEX_FBM                         3
210 #define TEX_HTERRAIN            4
211
212 /* newnoise: noisebasis 1 & 2 */
213 #define TEX_BLENDER                     0
214 #define TEX_STDPERLIN           1
215 #define TEX_NEWPERLIN           2
216 #define TEX_VORONOI_F1          3
217 #define TEX_VORONOI_F2          4
218 #define TEX_VORONOI_F3          5
219 #define TEX_VORONOI_F4          6
220 #define TEX_VORONOI_F2F1        7
221 #define TEX_VORONOI_CRACKLE             8
222 #define TEX_CELLNOISE           14
223
224 /* newnoise: Voronoi distance metrics, vn_distm */
225 #define TEX_DISTANCE            0
226 #define TEX_DISTANCE_SQUARED            1
227 #define TEX_MANHATTAN           2
228 #define TEX_CHEBYCHEV           3
229 #define TEX_MINKOVSKY_HALF              4
230 #define TEX_MINKOVSKY_FOUR              5
231 #define TEX_MINKOVSKY           6
232
233 /* imaflag */
234 #define TEX_INTERPOL    1
235 #define TEX_USEALPHA    2
236 #define TEX_MIPMAP              4
237 #define TEX_FIELDS              8
238 #define TEX_IMAROT              16
239 #define TEX_CALCALPHA   32
240 #define TEX_ANIMCYCLIC  64
241 #define TEX_ANIM5               128
242 #define TEX_ANTIALI             256
243 #define TEX_ANTISCALE   512
244 #define TEX_STD_FIELD   1024
245 #define TEX_NORMALMAP   2048
246 #define TEX_GAUSS_MIP   4096
247
248 #define TEX_MORKPATCH   16384
249
250 /* flag */
251 #define TEX_COLORBAND           1
252 #define TEX_FLIPBLEND           2
253 #define TEX_NEGALPHA            4
254 #define TEX_CHECKER_ODD         8
255 #define TEX_CHECKER_EVEN        16
256 #define TEX_PRV_ALPHA           32
257 #define TEX_PRV_NOR                     64
258
259 /* extend (starts with 1 because of backward comp.) */
260 #define TEX_EXTEND              1
261 #define TEX_CLIP                2
262 #define TEX_REPEAT              3
263 #define TEX_CLIPCUBE    4
264 #define TEX_CHECKER             5
265
266 /* noisetype */
267 #define TEX_NOISESOFT   0
268 #define TEX_NOISEPERL   1
269
270 /* tex->noisebasis2 in texture.c - wood waveforms */
271 #define TEX_SIN                 0
272 #define TEX_SAW                 1
273 #define TEX_TRI                 2
274
275 /* tex->stype in texture.c - wood types */
276 #define TEX_BAND                0
277 #define TEX_RING                1
278 #define TEX_BANDNOISE   2
279 #define TEX_RINGNOISE   3
280
281 /* tex->stype in texture.c - marble types */
282 #define TEX_SOFT                0
283 #define TEX_SHARP               1
284 #define TEX_SHARPER             2
285
286 /* tex->stype in texture.c - blend types */
287 #define TEX_LIN                 0
288 #define TEX_QUAD                1
289 #define TEX_EASE                2
290 #define TEX_DIAG                3
291 #define TEX_SPHERE              4
292 #define TEX_HALO                5
293 #define TEX_RAD                 6
294
295 /* wrap */
296 #define MTEX_FLAT               0
297 #define MTEX_CUBE               1
298 #define MTEX_TUBE               2
299 #define MTEX_SPHERE             3
300
301 /* return value */
302 #define TEX_INT         0
303 #define TEX_RGB         1
304 #define TEX_NOR         2
305
306 /* **************** MTEX ********************* */
307
308 /* proj */
309 #define PROJ_N                  0
310 #define PROJ_X                  1
311 #define PROJ_Y                  2
312 #define PROJ_Z                  3
313
314 /* texflag */
315 #define MTEX_RGBTOINT   1
316 #define MTEX_STENCIL    2
317 #define MTEX_NEGATIVE   4
318 #define MTEX_ALPHAMIX   8
319 #define MTEX_VIEWSPACE  16
320
321 /* blendtype */
322 #define MTEX_BLEND              0
323 #define MTEX_MUL                1
324 #define MTEX_ADD                2
325 #define MTEX_SUB                3
326 #define MTEX_DIV                4
327 #define MTEX_DARK               5
328 #define MTEX_DIFF               6
329 #define MTEX_LIGHT              7
330 #define MTEX_SCREEN             8
331 #define MTEX_OVERLAY    9
332
333 /* **************** EnvMap ********************* */
334
335 /* type */
336 #define ENV_CUBE        0
337 #define ENV_PLANE       1
338 #define ENV_SPHERE      2
339
340 /* stype */
341 #define ENV_STATIC      0
342 #define ENV_ANIM        1
343 #define ENV_LOAD        2
344
345 /* ok */
346 #define ENV_NORMAL      1
347 #define ENV_OSA         2
348
349 #endif
350