Fix for own mistake: arc diff swallowed a commit somehow, breaking
[blender.git] / source / blender / makesdna / DNA_smoke_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2006 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): Daniel Genrich (Genscher)
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file DNA_smoke_types.h
29  *  \ingroup DNA
30  */
31
32 #ifndef __DNA_SMOKE_TYPES_H__
33 #define __DNA_SMOKE_TYPES_H__
34
35 /* flags */
36 enum {
37         MOD_SMOKE_HIGHRES = (1 << 1),  /* enable high resolution */
38         MOD_SMOKE_DISSOLVE = (1 << 2),  /* let smoke dissolve */
39         MOD_SMOKE_DISSOLVE_LOG = (1 << 3),  /* using 1/x for dissolve */
40
41         MOD_SMOKE_HIGH_SMOOTH = (1 << 5),  /* -- Deprecated -- */
42         MOD_SMOKE_FILE_LOAD = (1 << 6),  /* flag for file load */
43         MOD_SMOKE_ADAPTIVE_DOMAIN = (1 << 7),
44 };
45
46 #if (DNA_DEPRECATED_GCC_POISON == 1)
47 #pragma GCC poison MOD_SMOKE_HIGH_SMOOTH
48 #endif
49
50 /* noise */
51 #define MOD_SMOKE_NOISEWAVE (1<<0)
52 #define MOD_SMOKE_NOISEFFT (1<<1)
53 #define MOD_SMOKE_NOISECURL (1<<2)
54 /* viewsettings */
55 #define MOD_SMOKE_VIEW_SHOWBIG (1<<0)
56
57 /* cache compression */
58 #define SM_CACHE_LIGHT          0
59 #define SM_CACHE_HEAVY          1
60
61 /* domain border collision */
62 #define SM_BORDER_OPEN          0
63 #define SM_BORDER_VERTICAL      1
64 #define SM_BORDER_CLOSED        2
65
66 /* collision types */
67 #define SM_COLL_STATIC          0
68 #define SM_COLL_RIGID           1
69 #define SM_COLL_ANIMATED        2
70
71 /* high resolution sampling types */
72 #define SM_HRES_NEAREST         0
73 #define SM_HRES_LINEAR          1
74 #define SM_HRES_FULLSAMPLE      2
75
76 /* smoke data fileds (active_fields) */
77 #define SM_ACTIVE_HEAT          (1<<0)
78 #define SM_ACTIVE_FIRE          (1<<1)
79 #define SM_ACTIVE_COLORS        (1<<2)
80 #define SM_ACTIVE_COLOR_SET     (1<<3)
81
82 typedef struct SmokeDomainSettings {
83         struct SmokeModifierData *smd; /* for fast RNA access */
84         struct FLUID_3D *fluid;
85         void *fluid_mutex;
86         struct Group *fluid_group;
87         struct Group *eff_group; // UNUSED
88         struct Group *coll_group; // collision objects group
89         struct WTURBULENCE *wt; // WTURBULENCE object, if active
90         struct GPUTexture *tex;
91         struct GPUTexture *tex_wt;
92         struct GPUTexture *tex_shadow;
93         struct GPUTexture *tex_flame;
94         float *shadow;
95
96         /* simulation data */
97         float p0[3]; /* start point of BB in local space (includes sub-cell shift for adaptive domain)*/
98         float p1[3]; /* end point of BB in local space */
99         float dp0[3]; /* difference from object center to grid start point */
100         float cell_size[3]; /* size of simulation cell in local space */
101         float global_size[3]; /* global size of domain axises */
102         float prev_loc[3];
103         int shift[3]; /* current domain shift in simulation cells */
104         float shift_f[3]; /* exact domain shift */
105         float obj_shift_f[3]; /* how much object has shifted since previous smoke frame (used to "lock" domain while drawing) */
106         float imat[4][4]; /* domain object imat */
107         float obmat[4][4]; /* domain obmat */
108
109         int base_res[3]; /* initial "non-adapted" resolution */
110         int res_min[3]; /* cell min */
111         int res_max[3]; /* cell max */
112         int res[3]; /* data resolution (res_max-res_min) */
113         int total_cells;
114         float dx; /* 1.0f / res */
115         float scale; /* largest domain size */
116
117         /* user settings */
118         int adapt_margin;
119         int adapt_res;
120         float adapt_threshold;
121
122         float alpha;
123         float beta;
124         int amplify; /* wavelet amplification */
125         int maxres; /* longest axis on the BB gets this resolution assigned */
126         int flags; /* show up-res or low res, etc */
127         int viewsettings;
128         short noise; /* noise type: wave, curl, anisotropic */
129         short diss_percent; 
130         int diss_speed;/* in frames */
131         float strength;
132         int res_wt[3];
133         float dx_wt;
134         int cache_comp;
135         int cache_high_comp;
136
137         /* Smoke uses only one cache from now on (index [0]), but keeping the array for now for reading old files. */
138         struct PointCache *point_cache[2];      /* definition is in DNA_object_force.h */
139         struct ListBase ptcaches[2];
140         struct EffectorWeights *effector_weights;
141         int border_collisions;  /* How domain border collisions are handled */
142         float time_scale;
143         float vorticity;
144         int active_fields;
145         float active_color[3]; /* monitor color situation of simulation */
146         int highres_sampling;
147
148         /* flame parameters */
149         float burning_rate, flame_smoke, flame_vorticity;
150         float flame_ignition, flame_max_temp;
151         float flame_smoke_color[3];
152 } SmokeDomainSettings;
153
154
155 /* inflow / outflow */
156
157 /* type */
158 #define MOD_SMOKE_FLOW_TYPE_SMOKE 0
159 #define MOD_SMOKE_FLOW_TYPE_FIRE 1
160 #define MOD_SMOKE_FLOW_TYPE_OUTFLOW 2
161 #define MOD_SMOKE_FLOW_TYPE_SMOKEFIRE 3
162
163 /* flow source */
164 #define MOD_SMOKE_FLOW_SOURCE_PARTICLES 0
165 #define MOD_SMOKE_FLOW_SOURCE_MESH 1
166
167 /* flow texture type */
168 #define MOD_SMOKE_FLOW_TEXTURE_MAP_AUTO 0
169 #define MOD_SMOKE_FLOW_TEXTURE_MAP_UV 1
170
171 /* flags */
172 #define MOD_SMOKE_FLOW_ABSOLUTE (1<<1) /*old style emission*/
173 #define MOD_SMOKE_FLOW_INITVELOCITY (1<<2) /* passes particles speed to the smoke */
174 #define MOD_SMOKE_FLOW_TEXTUREEMIT (1<<3) /* use texture to control emission speed */
175 #define MOD_SMOKE_FLOW_USE_PART_SIZE (1<<4) /* use specific size for particles instead of closest cell */
176
177 typedef struct SmokeFlowSettings {
178         struct SmokeModifierData *smd; /* for fast RNA access */
179         struct DerivedMesh *dm;
180         struct ParticleSystem *psys;
181         struct Tex *noise_texture;
182
183         /* initial velocity */
184         float *verts_old; /* previous vertex positions in domain space */
185         int numverts;
186         float vel_multi; // Multiplier for inherited velocity
187         float vel_normal;
188         float vel_random;
189         /* emission */
190         float density;
191         float color[3];
192         float fuel_amount;
193         float temp; /* delta temperature (temp - ambient temp) */
194         float volume_density; /* density emitted within mesh volume */
195         float surface_distance; /* maximum emission distance from mesh surface */
196         float particle_size;
197         int subframes;
198         /* texture control */
199         float texture_size;
200         float texture_offset;
201         int pad;
202         char uvlayer_name[64];  /* MAX_CUSTOMDATA_LAYER_NAME */
203         short vgroup_density;
204
205         short type; /* smoke, flames, both, outflow */
206         short source;
207         short texture_type;
208         int flags; /* absolute emission etc*/
209 } SmokeFlowSettings;
210
211
212 // struct BVHTreeFromMesh *bvh;
213 // float mat[4][4];
214 // float mat_old[4][4];
215
216 /* collision objects (filled with smoke) */
217 typedef struct SmokeCollSettings {
218         struct SmokeModifierData *smd; /* for fast RNA access */
219         struct DerivedMesh *dm;
220         float *verts_old;
221         int numverts;
222         short type; // static = 0, rigid = 1, dynamic = 2
223         short pad;
224 } SmokeCollSettings;
225
226 #endif