Important bugfix: Image mapping "repeat" didn't support mirrored tiling
[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 ImBuf;
48
49 typedef struct MTex {
50
51         short texco, mapto, maptoneg, blendtype;
52         struct Object *object;
53         struct Tex *tex;
54         char uvname[32];
55         
56         char projx, projy, projz, mapping;
57         float ofs[3], size[3];
58         
59         short texflag, colormodel;
60         float r, g, b, k;
61         float def_var;
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 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 Tex {
131         ID id;
132         
133         float noisesize, turbul;
134         float bright, contrast, rfac, gfac, bfac;
135         float filtersize;
136
137         /* newnoise: musgrave parameters */
138         float mg_H, mg_lacunarity, mg_octaves, mg_offset, mg_gain;
139
140         /* newnoise: distorted noise amount, musgrave & voronoi ouput scale */
141         float dist_amount, ns_outscale;
142
143         /* newnoise: voronoi nearest neighbour weights, minkovsky exponent, distance metric & color type */
144         float vn_w1, vn_w2, vn_w3, vn_w4, vn_mexp;
145         short vn_distm, vn_coltype;
146
147         short noisedepth, noisetype;
148
149         /* newnoise: noisebasis type for clouds/marble/etc, noisebasis2 only used for distorted noise */
150         short noisebasis, noisebasis2;
151         
152         short imaflag, flag;
153         short type, stype;
154         
155         float cropxmin, cropymin, cropxmax, cropymax;
156         short xrepeat, yrepeat;
157         short extend;
158         
159         /* variables disabled, moved to struct iuser */
160         short fie_ima;
161         int len;
162         int frames, offset, sfra;
163         
164         float checkerdist, nabla;
165         float norfac;
166         
167         struct ImageUser iuser;
168         
169         struct Ipo *ipo;
170         struct Image *ima;
171         struct PluginTex *plugin;
172         struct ColorBand *coba;
173         struct EnvMap *env;
174         
175         
176 } Tex;
177
178 /* used for mapping node. note: rot is in degrees */
179
180 typedef struct TexMapping {
181         float loc[3], rot[3], size[3];
182         int flag;
183         
184         float mat[4][4];
185         float min[3], max[3];
186         struct Object *ob;
187
188 } TexMapping;
189
190 /* texmap->flag */
191 #define TEXMAP_CLIP_MIN 1
192 #define TEXMAP_CLIP_MAX 2
193
194
195 /* **************** TEX ********************* */
196
197 /* type */
198 #define TEX_CLOUDS              1
199 #define TEX_WOOD                2
200 #define TEX_MARBLE              3
201 #define TEX_MAGIC               4
202 #define TEX_BLEND               5
203 #define TEX_STUCCI              6
204 #define TEX_NOISE               7
205 #define TEX_IMAGE               8
206 #define TEX_PLUGIN              9
207 #define TEX_ENVMAP              10
208 #define TEX_MUSGRAVE    11
209 #define TEX_VORONOI             12
210 #define TEX_DISTNOISE   13
211
212 /* musgrave stype */
213 #define TEX_MFRACTAL            0
214 #define TEX_RIDGEDMF            1
215 #define TEX_HYBRIDMF            2
216 #define TEX_FBM                         3
217 #define TEX_HTERRAIN            4
218
219 /* newnoise: noisebasis 1 & 2 */
220 #define TEX_BLENDER                     0
221 #define TEX_STDPERLIN           1
222 #define TEX_NEWPERLIN           2
223 #define TEX_VORONOI_F1          3
224 #define TEX_VORONOI_F2          4
225 #define TEX_VORONOI_F3          5
226 #define TEX_VORONOI_F4          6
227 #define TEX_VORONOI_F2F1        7
228 #define TEX_VORONOI_CRACKLE             8
229 #define TEX_CELLNOISE           14
230
231 /* newnoise: Voronoi distance metrics, vn_distm */
232 #define TEX_DISTANCE            0
233 #define TEX_DISTANCE_SQUARED            1
234 #define TEX_MANHATTAN           2
235 #define TEX_CHEBYCHEV           3
236 #define TEX_MINKOVSKY_HALF              4
237 #define TEX_MINKOVSKY_FOUR              5
238 #define TEX_MINKOVSKY           6
239
240 /* imaflag */
241 #define TEX_INTERPOL    1
242 #define TEX_USEALPHA    2
243 #define TEX_MIPMAP              4
244 #define TEX_IMAROT              16
245 #define TEX_CALCALPHA   32
246 #define TEX_NORMALMAP   2048
247 #define TEX_GAUSS_MIP   4096
248
249 /* imaflag unused, only for version check */
250 #define TEX_FIELDS_             8
251 #define TEX_ANIMCYCLIC_ 64
252 #define TEX_ANIM5_              128
253 #define TEX_ANTIALI_    256
254 #define TEX_ANTISCALE_  512
255 #define TEX_STD_FIELD_  1024
256
257 /* flag */
258 #define TEX_COLORBAND           1
259 #define TEX_FLIPBLEND           2
260 #define TEX_NEGALPHA            4
261 #define TEX_CHECKER_ODD         8
262 #define TEX_CHECKER_EVEN        16
263 #define TEX_PRV_ALPHA           32
264 #define TEX_PRV_NOR                     64
265 #define TEX_REPEAT_XMIR         128
266 #define TEX_REPEAT_YMIR         256
267
268 /* extend (starts with 1 because of backward comp.) */
269 #define TEX_EXTEND              1
270 #define TEX_CLIP                2
271 #define TEX_REPEAT              3
272 #define TEX_CLIPCUBE    4
273 #define TEX_CHECKER             5
274
275 /* noisetype */
276 #define TEX_NOISESOFT   0
277 #define TEX_NOISEPERL   1
278
279 /* tex->noisebasis2 in texture.c - wood waveforms */
280 #define TEX_SIN                 0
281 #define TEX_SAW                 1
282 #define TEX_TRI                 2
283
284 /* tex->stype in texture.c - wood types */
285 #define TEX_BAND                0
286 #define TEX_RING                1
287 #define TEX_BANDNOISE   2
288 #define TEX_RINGNOISE   3
289
290 /* tex->stype in texture.c - marble types */
291 #define TEX_SOFT                0
292 #define TEX_SHARP               1
293 #define TEX_SHARPER             2
294
295 /* tex->stype in texture.c - blend types */
296 #define TEX_LIN                 0
297 #define TEX_QUAD                1
298 #define TEX_EASE                2
299 #define TEX_DIAG                3
300 #define TEX_SPHERE              4
301 #define TEX_HALO                5
302 #define TEX_RAD                 6
303
304 /* wrap */
305 #define MTEX_FLAT               0
306 #define MTEX_CUBE               1
307 #define MTEX_TUBE               2
308 #define MTEX_SPHERE             3
309
310 /* return value */
311 #define TEX_INT         0
312 #define TEX_RGB         1
313 #define TEX_NOR         2
314
315 /* **************** MTEX ********************* */
316
317 /* proj */
318 #define PROJ_N                  0
319 #define PROJ_X                  1
320 #define PROJ_Y                  2
321 #define PROJ_Z                  3
322
323 /* texflag */
324 #define MTEX_RGBTOINT   1
325 #define MTEX_STENCIL    2
326 #define MTEX_NEGATIVE   4
327 #define MTEX_ALPHAMIX   8
328 #define MTEX_VIEWSPACE  16
329
330 /* blendtype */
331 #define MTEX_BLEND              0
332 #define MTEX_MUL                1
333 #define MTEX_ADD                2
334 #define MTEX_SUB                3
335 #define MTEX_DIV                4
336 #define MTEX_DARK               5
337 #define MTEX_DIFF               6
338 #define MTEX_LIGHT              7
339 #define MTEX_SCREEN             8
340 #define MTEX_OVERLAY    9
341
342 /* **************** EnvMap ********************* */
343
344 /* type */
345 #define ENV_CUBE        0
346 #define ENV_PLANE       1
347 #define ENV_SPHERE      2
348
349 /* stype */
350 #define ENV_STATIC      0
351 #define ENV_ANIM        1
352 #define ENV_LOAD        2
353
354 /* ok */
355 #define ENV_NORMAL      1
356 #define ENV_OSA         2
357
358 #endif
359