MeshBatchCache: Speedup: Do not return valid batch if geometry is empty
[blender.git] / source / blender / makesdna / DNA_dynamicpaint_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
17 /** \file
18  * \ingroup DNA
19  */
20
21 #ifndef __DNA_DYNAMICPAINT_TYPES_H__
22 #define __DNA_DYNAMICPAINT_TYPES_H__
23
24 #include "DNA_listBase.h"
25 struct PaintSurfaceData;
26
27 /* surface format */
28 enum {
29   MOD_DPAINT_SURFACE_F_PTEX = 0,
30   MOD_DPAINT_SURFACE_F_VERTEX = 1,
31   MOD_DPAINT_SURFACE_F_IMAGESEQ = 2,
32 };
33
34 /* surface type */
35 enum {
36   MOD_DPAINT_SURFACE_T_PAINT = 0,
37   MOD_DPAINT_SURFACE_T_DISPLACE = 1,
38   MOD_DPAINT_SURFACE_T_WEIGHT = 2,
39   MOD_DPAINT_SURFACE_T_WAVE = 3,
40 };
41
42 /* surface flags */
43 enum {
44   MOD_DPAINT_ACTIVE = 1 << 0, /* Is surface enabled */
45
46   MOD_DPAINT_ANTIALIAS = 1 << 1,    /* do antialiasing */
47   MOD_DPAINT_DISSOLVE = 1 << 2,     /* do dissolve */
48   MOD_DPAINT_MULALPHA = 1 << 3,     /* Multiply color by alpha when saving image */
49   MOD_DPAINT_DISSOLVE_LOG = 1 << 4, /* Use 1/x for surface dissolve */
50   MOD_DPAINT_DRY_LOG = 1 << 5,      /* Use 1/x for drying paint */
51
52   MOD_DPAINT_WAVE_OPEN_BORDERS = 1 << 7, /* passes waves through mesh edges */
53   MOD_DPAINT_DISP_INCREMENTAL = 1 << 8,  /* builds displace on top of earlier values */
54   MOD_DPAINT_USE_DRYING = 1 << 9,        /* use drying */
55
56   MOD_DPAINT_OUT1 = 1 << 10, /* output primary surface */
57   MOD_DPAINT_OUT2 = 1 << 11, /* output secondary surface */
58 };
59
60 /* image_fileformat */
61 enum {
62   MOD_DPAINT_IMGFORMAT_PNG = 0,
63   MOD_DPAINT_IMGFORMAT_OPENEXR = 1,
64 };
65
66 /* disp_format */
67 enum {
68   MOD_DPAINT_DISP_DISPLACE = 0, /* displacement output displace map */
69   MOD_DPAINT_DISP_DEPTH = 1,    /* displacement output depth data */
70 };
71
72 /* effect */
73 enum {
74   MOD_DPAINT_EFFECT_DO_SPREAD = 1 << 0, /* do spread effect */
75   MOD_DPAINT_EFFECT_DO_DRIP = 1 << 1,   /* do drip effect */
76   MOD_DPAINT_EFFECT_DO_SHRINK = 1 << 2, /* do shrink effect */
77 };
78
79 /* init_color_type */
80 enum {
81   MOD_DPAINT_INITIAL_NONE = 0,
82   MOD_DPAINT_INITIAL_COLOR = 1,
83   MOD_DPAINT_INITIAL_TEXTURE = 2,
84   MOD_DPAINT_INITIAL_VERTEXCOLOR = 3,
85 };
86
87 /* Is stored in ModifierData.runtime. */
88 #
89 #
90 typedef struct DynamicPaintRuntime {
91   struct Mesh *canvas_mesh;
92   struct Mesh *brush_mesh;
93 } DynamicPaintRuntime;
94
95 typedef struct DynamicPaintSurface {
96
97   struct DynamicPaintSurface *next, *prev;
98   /** For fast RNA access. */
99   struct DynamicPaintCanvasSettings *canvas;
100   struct PaintSurfaceData *data;
101
102   struct Collection *brush_group;
103   struct EffectorWeights *effector_weights;
104
105   /* cache */
106   struct PointCache *pointcache;
107   struct ListBase ptcaches;
108   int current_frame;
109
110   /* surface */
111   char name[64];
112   short format, type;
113   short disp_type, image_fileformat;
114   /** Ui selection box. */
115   short effect_ui;
116   short init_color_type;
117   int flags, effect;
118
119   int image_resolution, substeps;
120   int start_frame, end_frame;
121
122   /* initial color */
123   float init_color[4];
124   struct Tex *init_texture;
125   /** MAX_CUSTOMDATA_LAYER_NAME. */
126   char init_layername[64];
127
128   int dry_speed, diss_speed;
129   float color_dry_threshold;
130   float depth_clamp, disp_factor;
131
132   float spread_speed, color_spread_speed, shrink_speed;
133   float drip_vel, drip_acc;
134
135   /* per surface brush settings */
136   float influence_scale, radius_scale;
137
138   /* wave settings */
139   float wave_damping, wave_speed, wave_timescale, wave_spring, wave_smoothness;
140   char _pad2[4];
141
142   /** MAX_CUSTOMDATA_LAYER_NAME. */
143   char uvlayer_name[64];
144   /** 1024 = FILE_MAX. */
145   char image_output_path[1024];
146   /** MAX_CUSTOMDATA_LAYER_NAME. */
147   char output_name[64];
148   /** MAX_CUSTOMDATA_LAYER_NAME */ /* some surfaces have 2 outputs. */
149   char output_name2[64];
150
151 } DynamicPaintSurface;
152
153 /* canvas flags */
154 enum {
155   /** surface is already baking, so it wont get updated (loop) */
156   MOD_DPAINT_BAKING = 1 << 1,
157 };
158
159 /* Canvas settings */
160 typedef struct DynamicPaintCanvasSettings {
161   /** For fast RNA access. */
162   struct DynamicPaintModifierData *pmd;
163
164   struct ListBase surfaces;
165   short active_sur, flags;
166   char _pad[4];
167
168   /** Bake error description. */
169   char error[64];
170
171 } DynamicPaintCanvasSettings;
172
173 /* flags */
174 enum {
175   /** use particle radius */
176   MOD_DPAINT_PART_RAD = 1 << 0,
177   // MOD_DPAINT_USE_MATERIAL       = 1 << 1,  /* DNA_DEPRECATED */
178   /** don't increase alpha unless paint alpha is higher than existing */
179   MOD_DPAINT_ABS_ALPHA = 1 << 2,
180   /** removes paint */
181   MOD_DPAINT_ERASE = 1 << 3,
182
183   /** only read falloff ramp alpha */
184   MOD_DPAINT_RAMP_ALPHA = 1 << 4,
185   /** do proximity check only in defined dir */
186   MOD_DPAINT_PROX_PROJECT = 1 << 5,
187   /** inverse proximity painting */
188   MOD_DPAINT_INVERSE_PROX = 1 << 6,
189   /** negates volume influence on "volume + prox" mode */
190   MOD_DPAINT_NEGATE_VOLUME = 1 << 7,
191
192   /** brush smudges existing paint */
193   MOD_DPAINT_DO_SMUDGE = 1 << 8,
194   /** multiply brush influence by velocity */
195   MOD_DPAINT_VELOCITY_ALPHA = 1 << 9,
196   /** replace brush color by velocity color ramp */
197   MOD_DPAINT_VELOCITY_COLOR = 1 << 10,
198   /** multiply brush intersection depth by velocity */
199   MOD_DPAINT_VELOCITY_DEPTH = 1 << 11,
200
201   MOD_DPAINT_USES_VELOCITY = (MOD_DPAINT_DO_SMUDGE | MOD_DPAINT_VELOCITY_ALPHA |
202                               MOD_DPAINT_VELOCITY_COLOR | MOD_DPAINT_VELOCITY_DEPTH),
203 };
204
205 /* collision type */
206 enum {
207   MOD_DPAINT_COL_VOLUME = 0,  /* paint with mesh volume */
208   MOD_DPAINT_COL_DIST = 1,    /* paint using distance to mesh surface */
209   MOD_DPAINT_COL_VOLDIST = 2, /* use both volume and distance */
210   MOD_DPAINT_COL_PSYS = 3,    /* use particle system */
211   MOD_DPAINT_COL_POINT = 4,   /* use distance to object center point */
212 };
213
214 /* proximity_falloff */
215 enum {
216   MOD_DPAINT_PRFALL_CONSTANT = 0, /* no-falloff */
217   MOD_DPAINT_PRFALL_SMOOTH = 1,   /* smooth, linear falloff */
218   MOD_DPAINT_PRFALL_RAMP = 2,     /* use color ramp */
219 };
220
221 /* wave_brush_type */
222 enum {
223   MOD_DPAINT_WAVEB_DEPTH = 0,   /* use intersection depth */
224   MOD_DPAINT_WAVEB_FORCE = 1,   /* act as a force on intersection area */
225   MOD_DPAINT_WAVEB_REFLECT = 2, /* obstacle that reflects waves */
226   MOD_DPAINT_WAVEB_CHANGE = 3,  /* use change of intersection depth from previous frame */
227 };
228
229 /* brush ray_dir */
230 enum {
231   MOD_DPAINT_RAY_CANVAS = 0,
232   MOD_DPAINT_RAY_BRUSH_AVG = 1,
233   MOD_DPAINT_RAY_ZPLUS = 2,
234 };
235
236 /* Brush settings */
237 typedef struct DynamicPaintBrushSettings {
238   /** For fast RNA access. */
239   struct DynamicPaintModifierData *pmd;
240   struct ParticleSystem *psys;
241
242   int flags;
243   int collision;
244
245   float r, g, b, alpha;
246   float wetness;
247
248   float particle_radius, particle_smooth;
249   float paint_distance;
250
251   /* color ramps */
252   /** Proximity paint falloff. */
253   struct ColorBand *paint_ramp;
254   /** Velocity paint ramp. */
255   struct ColorBand *vel_ramp;
256
257   short proximity_falloff;
258   short wave_type;
259   short ray_dir;
260   char _pad[2];
261
262   float wave_factor, wave_clamp;
263   float max_velocity, smudge_strength;
264 } DynamicPaintBrushSettings;
265
266 #endif