Fix Cycles CUDA suboptimal performance on Windows 10 with recent graphics cards
[blender.git] / source / blender / makesdna / DNA_texture_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup DNA
22  */
23
24 #ifndef __DNA_TEXTURE_TYPES_H__
25 #define __DNA_TEXTURE_TYPES_H__
26
27 #include "DNA_defs.h"
28 #include "DNA_ID.h"
29 #include "DNA_image_types.h" /* ImageUser */
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 struct AnimData;
36 struct ColorBand;
37 struct CurveMapping;
38 struct ImBuf;
39 struct Image;
40 struct Ipo;
41 struct Object;
42 struct PreviewImage;
43 struct Tex;
44
45 typedef struct MTex {
46
47   short texco, mapto, maptoneg, blendtype;
48   struct Object *object;
49   struct Tex *tex;
50   /** MAX_CUSTOMDATA_LAYER_NAME. */
51   char uvname[64];
52
53   char projx, projy, projz, mapping;
54   char brush_map_mode, brush_angle_mode;
55   char _pad[2];
56   float ofs[3], size[3], rot, random_angle;
57
58   char _pad0[2];
59   short colormodel, pmapto, pmaptoneg;
60   short normapspace, which_output;
61   float r, g, b, k;
62   float def_var, rt;
63
64   /* common */
65   float colfac, varfac;
66
67   /* material */
68   float norfac, dispfac, warpfac;
69   float colspecfac, mirrfac, alphafac;
70   float difffac, specfac, emitfac, hardfac;
71   float raymirrfac, translfac, ambfac;
72   float colemitfac, colreflfac, coltransfac;
73   float densfac, scatterfac, reflfac;
74
75   /* particles */
76   float timefac, lengthfac, clumpfac, dampfac;
77   float kinkfac, kinkampfac, roughfac, padensfac, gravityfac;
78   float lifefac, sizefac, ivelfac, fieldfac;
79   float twistfac;
80
81   /* light */
82   float shadowfac;
83
84   /* world */
85   float zenupfac, zendownfac, blendfac;
86 } MTex;
87
88 #ifndef DNA_USHORT_FIX
89 #  define DNA_USHORT_FIX
90 /**
91  * \deprecated This typedef serves to avoid badly typed functions when
92  * \deprecated compiling while delivering a proper dna.c. Do not use
93  * \deprecated it in any case.
94  */
95 typedef unsigned short dna_ushort_fix;
96 #endif
97
98 typedef struct CBData {
99   float r, g, b, a, pos;
100   int cur;
101 } CBData;
102
103 /* 32 = MAXCOLORBAND */
104 /* note that this has to remain a single struct, for UserDef */
105 typedef struct ColorBand {
106   short tot, cur;
107   char ipotype, ipotype_hue;
108   char color_mode;
109   char _pad[1];
110
111   CBData data[32];
112 } ColorBand;
113
114 typedef struct PointDensity {
115   short flag;
116
117   short falloff_type;
118   float falloff_softness;
119   float radius;
120   short source;
121   char _pad0[2];
122
123   /** psys_color_source */
124   short color_source;
125   short ob_color_source;
126
127   int totpoints;
128
129   /** for 'Object' or 'Particle system' type - source object */
130   struct Object *object;
131   /** `index + 1` in ob.particlesystem, non-ID pointer not allowed */
132   int psys;
133   /** cache points in worldspace, object space, ... ? */
134   short psys_cache_space;
135   /** cache points in worldspace, object space, ... ? */
136   short ob_cache_space;
137   /** vertex attribute layer for color source, MAX_CUSTOMDATA_LAYER_NAME */
138   char vertex_attribute_name[64];
139
140   /** The acceleration tree containing points. */
141   void *point_tree;
142   /** Dynamically allocated extra for extra information, like particle age. */
143   float *point_data;
144
145   float noise_size;
146   short noise_depth;
147   short noise_influence;
148   short noise_basis;
149   char _pad1[6];
150   float noise_fac;
151
152   float speed_scale, falloff_speed_scale;
153   char _pad2[4];
154   /** For time -> color */
155   struct ColorBand *coba;
156
157   /** Falloff density curve. */
158   struct CurveMapping *falloff_curve;
159 } PointDensity;
160
161 typedef struct Tex {
162   ID id;
163   /** Animation data (must be immediately after id for utilities to use it). */
164   struct AnimData *adt;
165
166   float noisesize, turbul;
167   float bright, contrast, saturation, rfac, gfac, bfac;
168   float filtersize;
169   char _pad2[4];
170
171   /* newnoise: musgrave parameters */
172   float mg_H, mg_lacunarity, mg_octaves, mg_offset, mg_gain;
173
174   /* newnoise: distorted noise amount, musgrave & voronoi output scale */
175   float dist_amount, ns_outscale;
176
177   /* newnoise: voronoi nearest neighbor weights, minkovsky exponent,
178    * distance metric & color type */
179   float vn_w1;
180   float vn_w2;
181   float vn_w3;
182   float vn_w4;
183   float vn_mexp;
184   short vn_distm, vn_coltype;
185
186   /* noisedepth MUST be <= 30 else we get floating point exceptions */
187   short noisedepth, noisetype;
188
189   /* newnoise: noisebasis type for clouds/marble/etc, noisebasis2 only used for distorted noise */
190   short noisebasis, noisebasis2;
191
192   short imaflag, flag;
193   short type, stype;
194
195   float cropxmin, cropymin, cropxmax, cropymax;
196   int texfilter;
197   int afmax;  // anisotropic filter maximum value, ewa -> max eccentricity, feline -> max probes
198   short xrepeat, yrepeat;
199   short extend;
200
201   /* variables disabled, moved to struct iuser */
202   short _pad0;
203   int len;
204   int frames, offset, sfra;
205
206   float checkerdist, nabla;
207   char _pad1[4];
208
209   struct ImageUser iuser;
210
211   struct bNodeTree *nodetree;
212   /* old animation system, deprecated for 2.5 */
213   struct Ipo *ipo DNA_DEPRECATED;
214   struct Image *ima;
215   struct ColorBand *coba;
216   struct PreviewImage *preview;
217
218   char use_nodes;
219   char _pad[7];
220
221 } Tex;
222
223 /* used for mapping and texture nodes. note: rot is now in radians */
224
225 typedef struct TexMapping {
226   float loc[3], rot[3], size[3];
227   int flag;
228   char projx, projy, projz, mapping;
229   int type;
230
231   float mat[4][4];
232   float min[3], max[3];
233   struct Object *ob;
234
235 } TexMapping;
236
237 typedef struct ColorMapping {
238   struct ColorBand coba;
239
240   float bright, contrast, saturation;
241   int flag;
242
243   float blend_color[3];
244   float blend_factor;
245   int blend_type;
246   char _pad[4];
247 } ColorMapping;
248
249 /* texmap->flag */
250 #define TEXMAP_CLIP_MIN 1
251 #define TEXMAP_CLIP_MAX 2
252 #define TEXMAP_UNIT_MATRIX 4
253
254 /* texmap->type */
255 #define TEXMAP_TYPE_POINT 0
256 #define TEXMAP_TYPE_TEXTURE 1
257 #define TEXMAP_TYPE_VECTOR 2
258 #define TEXMAP_TYPE_NORMAL 3
259
260 /* colormap->flag */
261 #define COLORMAP_USE_RAMP 1
262
263 /* **************** TEX ********************* */
264
265 /* type */
266 #define TEX_CLOUDS 1
267 #define TEX_WOOD 2
268 #define TEX_MARBLE 3
269 #define TEX_MAGIC 4
270 #define TEX_BLEND 5
271 #define TEX_STUCCI 6
272 #define TEX_NOISE 7
273 #define TEX_IMAGE 8
274 //#define TEX_PLUGIN        9 /* Deprecated */
275 //#define TEX_ENVMAP        10 /* Deprecated */
276 #define TEX_MUSGRAVE 11
277 #define TEX_VORONOI 12
278 #define TEX_DISTNOISE 13
279 //#define TEX_POINTDENSITY  14 /* Deprecated */
280 //#define TEX_VOXELDATA     15 /* Deprecated */
281 //#define TEX_OCEAN         16 /* Deprecated */
282
283 /* musgrave stype */
284 #define TEX_MFRACTAL 0
285 #define TEX_RIDGEDMF 1
286 #define TEX_HYBRIDMF 2
287 #define TEX_FBM 3
288 #define TEX_HTERRAIN 4
289
290 /* newnoise: noisebasis 1 & 2 */
291 #define TEX_BLENDER 0
292 #define TEX_STDPERLIN 1
293 #define TEX_NEWPERLIN 2
294 #define TEX_VORONOI_F1 3
295 #define TEX_VORONOI_F2 4
296 #define TEX_VORONOI_F3 5
297 #define TEX_VORONOI_F4 6
298 #define TEX_VORONOI_F2F1 7
299 #define TEX_VORONOI_CRACKLE 8
300 #define TEX_CELLNOISE 14
301
302 /* newnoise: Voronoi distance metrics, vn_distm */
303 #define TEX_DISTANCE 0
304 #define TEX_DISTANCE_SQUARED 1
305 #define TEX_MANHATTAN 2
306 #define TEX_CHEBYCHEV 3
307 #define TEX_MINKOVSKY_HALF 4
308 #define TEX_MINKOVSKY_FOUR 5
309 #define TEX_MINKOVSKY 6
310
311 /* imaflag */
312 #define TEX_INTERPOL (1 << 0)
313 #define TEX_USEALPHA (1 << 1)
314 #define TEX_MIPMAP (1 << 2)
315 #define TEX_IMAROT (1 << 4)
316 #define TEX_CALCALPHA (1 << 5)
317 #define TEX_NORMALMAP (1 << 11)
318 #define TEX_GAUSS_MIP (1 << 12)
319 #define TEX_FILTER_MIN (1 << 13)
320 #define TEX_DERIVATIVEMAP (1 << 14)
321
322 /* texfilter */
323 // TXF_BOX -> blender's old texture filtering method
324 #define TXF_BOX 0
325 #define TXF_EWA 1
326 #define TXF_FELINE 2
327 #define TXF_AREA 3
328
329 /* flag */
330 #define TEX_COLORBAND (1 << 0)
331 #define TEX_FLIPBLEND (1 << 1)
332 #define TEX_NEGALPHA (1 << 2)
333 #define TEX_CHECKER_ODD (1 << 3)
334 #define TEX_CHECKER_EVEN (1 << 4)
335 #define TEX_PRV_ALPHA (1 << 5)
336 #define TEX_PRV_NOR (1 << 6)
337 #define TEX_REPEAT_XMIR (1 << 7)
338 #define TEX_REPEAT_YMIR (1 << 8)
339 #define TEX_FLAG_MASK \
340   (TEX_COLORBAND | TEX_FLIPBLEND | TEX_NEGALPHA | TEX_CHECKER_ODD | TEX_CHECKER_EVEN | \
341    TEX_PRV_ALPHA | TEX_PRV_NOR | TEX_REPEAT_XMIR | TEX_REPEAT_YMIR)
342 #define TEX_DS_EXPAND (1 << 9)
343 #define TEX_NO_CLAMP (1 << 10)
344
345 /* extend (starts with 1 because of backward comp.) */
346 #define TEX_EXTEND 1
347 #define TEX_CLIP 2
348 #define TEX_REPEAT 3
349 #define TEX_CLIPCUBE 4
350 #define TEX_CHECKER 5
351
352 /* noisetype */
353 #define TEX_NOISESOFT 0
354 #define TEX_NOISEPERL 1
355
356 /* tex->noisebasis2 in texture.c - wood waveforms */
357 #define TEX_SIN 0
358 #define TEX_SAW 1
359 #define TEX_TRI 2
360
361 /* tex->stype in texture.c - wood types */
362 #define TEX_BAND 0
363 #define TEX_RING 1
364 #define TEX_BANDNOISE 2
365 #define TEX_RINGNOISE 3
366
367 /* tex->stype in texture.c - cloud types */
368 #define TEX_DEFAULT 0
369 #define TEX_COLOR 1
370
371 /* tex->stype in texture.c - marble types */
372 #define TEX_SOFT 0
373 #define TEX_SHARP 1
374 #define TEX_SHARPER 2
375
376 /* tex->stype in texture.c - blend types */
377 #define TEX_LIN 0
378 #define TEX_QUAD 1
379 #define TEX_EASE 2
380 #define TEX_DIAG 3
381 #define TEX_SPHERE 4
382 #define TEX_HALO 5
383 #define TEX_RAD 6
384
385 /* tex->stype in texture.c - stucci types */
386 #define TEX_PLASTIC 0
387 #define TEX_WALLIN 1
388 #define TEX_WALLOUT 2
389
390 /* tex->stype in texture.c - voronoi types */
391 #define TEX_INTENSITY 0
392 #define TEX_COL1 1
393 #define TEX_COL2 2
394 #define TEX_COL3 3
395
396 /* mtex->normapspace */
397 #define MTEX_NSPACE_CAMERA 0
398 #define MTEX_NSPACE_WORLD 1
399 #define MTEX_NSPACE_OBJECT 2
400 #define MTEX_NSPACE_TANGENT 3
401
402 /* wrap */
403 #define MTEX_FLAT 0
404 #define MTEX_CUBE 1
405 #define MTEX_TUBE 2
406 #define MTEX_SPHERE 3
407
408 /* return value */
409 #define TEX_INT 0
410 #define TEX_RGB 1
411 #define TEX_NOR 2
412
413 /* pr_texture in material, world, light. */
414 #define TEX_PR_TEXTURE 0
415 #define TEX_PR_OTHER 1
416 #define TEX_PR_BOTH 2
417
418 /* **************** MTEX ********************* */
419
420 /* proj */
421 #define PROJ_N 0
422 #define PROJ_X 1
423 #define PROJ_Y 2
424 #define PROJ_Z 3
425
426 /* blendtype */
427 #define MTEX_BLEND 0
428 #define MTEX_MUL 1
429 #define MTEX_ADD 2
430 #define MTEX_SUB 3
431 #define MTEX_DIV 4
432 #define MTEX_DARK 5
433 #define MTEX_DIFF 6
434 #define MTEX_LIGHT 7
435 #define MTEX_SCREEN 8
436 #define MTEX_OVERLAY 9
437 #define MTEX_BLEND_HUE 10
438 #define MTEX_BLEND_SAT 11
439 #define MTEX_BLEND_VAL 12
440 #define MTEX_BLEND_COLOR 13
441 #define MTEX_SOFT_LIGHT 15
442 #define MTEX_LIN_LIGHT 16
443
444 /* brush_map_mode */
445 #define MTEX_MAP_MODE_VIEW 0
446 #define MTEX_MAP_MODE_TILED 1
447 #define MTEX_MAP_MODE_3D 2
448 #define MTEX_MAP_MODE_AREA 3
449 #define MTEX_MAP_MODE_RANDOM 4
450 #define MTEX_MAP_MODE_STENCIL 5
451
452 /* brush_angle_mode */
453 #define MTEX_ANGLE_RANDOM 1
454 #define MTEX_ANGLE_RAKE 2
455
456 /* **************** ColorBand ********************* */
457
458 /* colormode */
459 enum {
460   COLBAND_BLEND_RGB = 0,
461   COLBAND_BLEND_HSV = 1,
462   COLBAND_BLEND_HSL = 2,
463 };
464
465 /* interpolation */
466 enum {
467   COLBAND_INTERP_LINEAR = 0,
468   COLBAND_INTERP_EASE = 1,
469   COLBAND_INTERP_B_SPLINE = 2,
470   COLBAND_INTERP_CARDINAL = 3,
471   COLBAND_INTERP_CONSTANT = 4,
472 };
473
474 /* color interpolation */
475 enum {
476   COLBAND_HUE_NEAR = 0,
477   COLBAND_HUE_FAR = 1,
478   COLBAND_HUE_CW = 2,
479   COLBAND_HUE_CCW = 3,
480 };
481
482 /* **************** PointDensity ********************* */
483
484 /* source */
485 #define TEX_PD_PSYS 0
486 #define TEX_PD_OBJECT 1
487 #define TEX_PD_FILE 2
488
489 /* falloff_type */
490 #define TEX_PD_FALLOFF_STD 0
491 #define TEX_PD_FALLOFF_SMOOTH 1
492 #define TEX_PD_FALLOFF_SOFT 2
493 #define TEX_PD_FALLOFF_CONSTANT 3
494 #define TEX_PD_FALLOFF_ROOT 4
495 #define TEX_PD_FALLOFF_PARTICLE_AGE 5
496 #define TEX_PD_FALLOFF_PARTICLE_VEL 6
497
498 /* psys_cache_space */
499 #define TEX_PD_OBJECTLOC 0
500 #define TEX_PD_OBJECTSPACE 1
501 #define TEX_PD_WORLDSPACE 2
502
503 /* flag */
504 #define TEX_PD_TURBULENCE 1
505 #define TEX_PD_FALLOFF_CURVE 2
506
507 /* noise_influence */
508 #define TEX_PD_NOISE_STATIC 0
509 /* #define TEX_PD_NOISE_VEL     1 */ /* Deprecated */
510 /* #define TEX_PD_NOISE_AGE     2 */ /* Deprecated */
511 /* #define TEX_PD_NOISE_TIME    3 */ /* Deprecated */
512
513 /* color_source */
514 enum {
515   TEX_PD_COLOR_CONSTANT = 0,
516   /* color_source: particles */
517   TEX_PD_COLOR_PARTAGE = 1,
518   TEX_PD_COLOR_PARTSPEED = 2,
519   TEX_PD_COLOR_PARTVEL = 3,
520   /* color_source: vertices */
521   TEX_PD_COLOR_VERTCOL = 1,
522   TEX_PD_COLOR_VERTWEIGHT = 2,
523   TEX_PD_COLOR_VERTNOR = 3,
524 };
525
526 #define POINT_DATA_VEL 1
527 #define POINT_DATA_LIFE 2
528 #define POINT_DATA_COLOR 4
529
530 #ifdef __cplusplus
531 }
532 #endif
533
534 #endif