Cleanup: spaces around operators in DNA headers
[blender.git] / source / blender / makesdna / DNA_smoke_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) 2006 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup DNA
22  */
23
24 #ifndef __DNA_SMOKE_TYPES_H__
25 #define __DNA_SMOKE_TYPES_H__
26
27 /* flags */
28 enum {
29         MOD_SMOKE_HIGHRES = (1 << 1),  /* enable high resolution */
30         MOD_SMOKE_DISSOLVE = (1 << 2),  /* let smoke dissolve */
31         MOD_SMOKE_DISSOLVE_LOG = (1 << 3),  /* using 1/x for dissolve */
32
33 #ifdef DNA_DEPRECATED
34         MOD_SMOKE_HIGH_SMOOTH = (1 << 5),  /* -- Deprecated -- */
35 #endif
36         MOD_SMOKE_FILE_LOAD = (1 << 6),  /* flag for file load */
37         MOD_SMOKE_ADAPTIVE_DOMAIN = (1 << 7),
38 };
39
40 /* noise */
41 #define MOD_SMOKE_NOISEWAVE (1 << 0)
42 #define MOD_SMOKE_NOISEFFT (1 << 1)
43 #define MOD_SMOKE_NOISECURL (1 << 2)
44 /* viewsettings */
45 #define MOD_SMOKE_VIEW_SHOW_HIGHRES (1 << 0)
46
47 /* slice method */
48 enum {
49         MOD_SMOKE_SLICE_VIEW_ALIGNED = 0,
50         MOD_SMOKE_SLICE_AXIS_ALIGNED = 1,
51 };
52
53 /* axis aligned method */
54 enum {
55         AXIS_SLICE_FULL   = 0,
56         AXIS_SLICE_SINGLE = 1,
57 };
58
59 /* single slice direction */
60 enum {
61         SLICE_AXIS_AUTO = 0,
62         SLICE_AXIS_X    = 1,
63         SLICE_AXIS_Y    = 2,
64         SLICE_AXIS_Z    = 3,
65 };
66
67 /* axis aligned method */
68 enum {
69         VOLUME_INTERP_LINEAR   = 0,
70         VOLUME_INTERP_CUBIC    = 1,
71 };
72
73 enum {
74         VECTOR_DRAW_NEEDLE     = 0,
75         VECTOR_DRAW_STREAMLINE = 1,
76 };
77
78 enum {
79         FLUID_FIELD_DENSITY    = 0,
80         FLUID_FIELD_HEAT       = 1,
81         FLUID_FIELD_FUEL       = 2,
82         FLUID_FIELD_REACT      = 3,
83         FLUID_FIELD_FLAME      = 4,
84         FLUID_FIELD_VELOCITY_X = 5,
85         FLUID_FIELD_VELOCITY_Y = 6,
86         FLUID_FIELD_VELOCITY_Z = 7,
87         FLUID_FIELD_COLOR_R    = 8,
88         FLUID_FIELD_COLOR_G    = 9,
89         FLUID_FIELD_COLOR_B    = 10,
90         FLUID_FIELD_FORCE_X    = 11,
91         FLUID_FIELD_FORCE_Y    = 12,
92         FLUID_FIELD_FORCE_Z    = 13,
93 };
94
95 /* cache compression */
96 #define SM_CACHE_LIGHT          0
97 #define SM_CACHE_HEAVY          1
98
99 /* domain border collision */
100 #define SM_BORDER_OPEN          0
101 #define SM_BORDER_VERTICAL      1
102 #define SM_BORDER_CLOSED        2
103
104 /* collision types */
105 #define SM_COLL_STATIC          0
106 #define SM_COLL_RIGID           1
107 #define SM_COLL_ANIMATED        2
108
109 /* high resolution sampling types */
110 #define SM_HRES_NEAREST         0
111 #define SM_HRES_LINEAR          1
112 #define SM_HRES_FULLSAMPLE      2
113
114 /* smoke data fields (active_fields) */
115 #define SM_ACTIVE_HEAT          (1 << 0)
116 #define SM_ACTIVE_FIRE          (1 << 1)
117 #define SM_ACTIVE_COLORS        (1 << 2)
118 #define SM_ACTIVE_COLOR_SET     (1 << 3)
119
120 enum {
121         VDB_COMPRESSION_BLOSC = 0,
122         VDB_COMPRESSION_ZIP   = 1,
123         VDB_COMPRESSION_NONE  = 2,
124 };
125
126 typedef struct SmokeDomainSettings {
127         /** For fast RNA access. */
128         struct SmokeModifierData *smd;
129         struct FLUID_3D *fluid;
130         void *fluid_mutex;
131         struct Collection *fluid_group;
132         struct Collection *eff_group; // UNUSED
133         struct Collection *coll_group; // collision objects group
134         struct WTURBULENCE *wt; // WTURBULENCE object, if active
135         struct GPUTexture *tex;
136         struct GPUTexture *tex_wt;
137         struct GPUTexture *tex_shadow;
138         struct GPUTexture *tex_flame;
139         struct GPUTexture *tex_flame_coba;
140         struct GPUTexture *tex_coba;
141         struct GPUTexture *tex_field;
142         struct GPUTexture *tex_velocity_x;
143         struct GPUTexture *tex_velocity_y;
144         struct GPUTexture *tex_velocity_z;
145         float *shadow;
146
147         /* simulation data */
148         /** Start point of BB in local space (includes sub-cell shift for adaptive domain.)*/
149         float p0[3];
150         /** End point of BB in local space. */
151         float p1[3];
152         /** Difference from object center to grid start point. */
153         float dp0[3];
154         /** Size of simulation cell in local space. */
155         float cell_size[3];
156         /** Global size of domain axises. */
157         float global_size[3];
158         float prev_loc[3];
159         /** Current domain shift in simulation cells. */
160         int shift[3];
161         /** Exact domain shift. */
162         float shift_f[3];
163         /**
164          * How much object has shifted since previous smoke frame
165          * (used to "lock" domain while drawing).
166          */
167         float obj_shift_f[3];
168         /** Domain object imat. */
169         float imat[4][4];
170         /** Domain obmat. */
171         float obmat[4][4];
172         /** Low res fluid matrix. */
173         float fluidmat[4][4];
174         /** High res fluid matrix. */
175         float fluidmat_wt[4][4];
176
177         /** Initial "non-adapted" resolution. */
178         int base_res[3];
179         /** Cell min. */
180         int res_min[3];
181         /** Cell max. */
182         int res_max[3];
183         /** Data resolution (res_max-res_min). */
184         int res[3];
185         int total_cells;
186         /** 1.0f / res. */
187         float dx;
188         /** Largest domain size. */
189         float scale;
190
191         /* user settings */
192         int adapt_margin;
193         int adapt_res;
194         float adapt_threshold;
195
196         float alpha;
197         float beta;
198         /** Wavelet amplification. */
199         int amplify;
200         /** Longest axis on the BB gets this resolution assigned. */
201         int maxres;
202         /** Show up-res or low res, etc. */
203         int flags;
204         int viewsettings;
205         /** Noise type: wave, curl, anisotropic. */
206         short noise;
207         short diss_percent;
208         /** In frames. */
209         int diss_speed;
210         float strength;
211         int res_wt[3];
212         float dx_wt;
213         /* point cache options */
214         int cache_comp;
215         int cache_high_comp;
216         /* OpenVDB cache options */
217         int openvdb_comp;
218         char cache_file_format;
219         char data_depth;
220         char _pad[2];
221
222         /* Smoke uses only one cache from now on (index [0]),
223          * but keeping the array for now for reading old files. */
224         /** Definition is in DNA_object_force_types.h. */
225         struct PointCache *point_cache[2];
226         struct ListBase ptcaches[2];
227         struct EffectorWeights *effector_weights;
228         /** How domain border collisions are handled. */
229         int border_collisions;
230         float time_scale;
231         float vorticity;
232         int active_fields;
233         /** Monitor color situation of simulation. */
234         float active_color[3];
235         int highres_sampling;
236
237         /* flame parameters */
238         float burning_rate, flame_smoke, flame_vorticity;
239         float flame_ignition, flame_max_temp;
240         float flame_smoke_color[3];
241
242         /* Display settings */
243         char slice_method, axis_slice_method;
244         char slice_axis, draw_velocity;
245         float slice_per_voxel;
246         float slice_depth;
247         float display_thickness;
248
249         struct ColorBand *coba;
250         float vector_scale;
251         char vector_draw_type;
252         char use_coba;
253         /** Simulation field used for the color mapping. */
254         char coba_field;
255         char interp_method;
256
257         float clipping;
258         char _pad3[4];
259 } SmokeDomainSettings;
260
261
262 /* inflow / outflow */
263
264 /* type */
265 #define MOD_SMOKE_FLOW_TYPE_SMOKE 0
266 #define MOD_SMOKE_FLOW_TYPE_FIRE 1
267 #define MOD_SMOKE_FLOW_TYPE_OUTFLOW 2
268 #define MOD_SMOKE_FLOW_TYPE_SMOKEFIRE 3
269
270 /* flow source */
271 #define MOD_SMOKE_FLOW_SOURCE_PARTICLES 0
272 #define MOD_SMOKE_FLOW_SOURCE_MESH 1
273
274 /* flow texture type */
275 #define MOD_SMOKE_FLOW_TEXTURE_MAP_AUTO 0
276 #define MOD_SMOKE_FLOW_TEXTURE_MAP_UV 1
277
278 /* flags */
279 enum {
280         /**old style emission*/
281         MOD_SMOKE_FLOW_ABSOLUTE = (1 << 1),
282         /** passes particles speed to the smoke */
283         MOD_SMOKE_FLOW_INITVELOCITY = (1 << 2),
284         /** use texture to control emission speed */
285         MOD_SMOKE_FLOW_TEXTUREEMIT = (1 << 3),
286         /** use specific size for particles instead of closest cell */
287         MOD_SMOKE_FLOW_USE_PART_SIZE = (1 << 4),
288 };
289
290 typedef struct SmokeFlowSettings {
291         /** For fast RNA access. */
292         struct SmokeModifierData *smd;
293         struct Mesh *mesh;
294         struct ParticleSystem *psys;
295         struct Tex *noise_texture;
296
297         /* initial velocity */
298         /** Previous vertex positions in domain space. */
299         float *verts_old;
300         int numverts;
301         float vel_multi; // Multiplier for inherited velocity
302         float vel_normal;
303         float vel_random;
304         /* emission */
305         float density;
306         float color[3];
307         float fuel_amount;
308         /** Delta temperature (temp - ambient temp). */
309         float temp;
310         /** Density emitted within mesh volume. */
311         float volume_density;
312         /** Maximum emission distance from mesh surface. */
313         float surface_distance;
314         float particle_size;
315         int subframes;
316         /* texture control */
317         float texture_size;
318         float texture_offset;
319         char _pad[4];
320         /** MAX_CUSTOMDATA_LAYER_NAME. */
321         char uvlayer_name[64];
322         short vgroup_density;
323
324         /** Smoke, flames, both, outflow. */
325         short type;
326         short source;
327         short texture_type;
328         /** Absolute emission et.c*/
329         int flags;
330 } SmokeFlowSettings;
331
332
333 // struct BVHTreeFromMesh *bvh;
334 // float mat[4][4];
335 // float mat_old[4][4];
336
337 /* collision objects (filled with smoke) */
338 typedef struct SmokeCollSettings {
339         /** For fast RNA access. */
340         struct SmokeModifierData *smd;
341         struct Mesh *mesh;
342         float *verts_old;
343         int numverts;
344         short type; // static = 0, rigid = 1, dynamic = 2
345         char _pad[2];
346 } SmokeCollSettings;
347
348 #endif