Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/intern/dynamicpaint.c')
-rw-r--r--source/blender/blenkernel/intern/dynamicpaint.c607
1 files changed, 405 insertions, 202 deletions
diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c
index 2d4f1607fe4..7fef07346c3 100644
--- a/source/blender/blenkernel/intern/dynamicpaint.c
+++ b/source/blender/blenkernel/intern/dynamicpaint.c
@@ -343,10 +343,12 @@ static void dynamicPaint_setPreview(DynamicPaintSurface *t_surface)
{
DynamicPaintSurface *surface = t_surface->canvas->surfaces.first;
for (; surface; surface = surface->next) {
- if (surface == t_surface)
+ if (surface == t_surface) {
surface->flags |= MOD_DPAINT_PREVIEW;
- else
+ }
+ else {
surface->flags &= ~MOD_DPAINT_PREVIEW;
+ }
}
}
@@ -354,12 +356,15 @@ bool dynamicPaint_outputLayerExists(struct DynamicPaintSurface *surface, Object
{
const char *name;
- if (output == 0)
+ if (output == 0) {
name = surface->output_name;
- else if (output == 1)
+ }
+ else if (output == 1) {
name = surface->output_name2;
- else
+ }
+ else {
return false;
+ }
if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
@@ -419,8 +424,9 @@ static bool surface_duplicateNameExists(void *arg, const char *name)
DynamicPaintSurface *surface = t_surface->canvas->surfaces.first;
for (; surface; surface = surface->next) {
- if (surface != t_surface && STREQ(name, surface->name))
+ if (surface != t_surface && STREQ(name, surface->name)) {
return true;
+ }
}
return false;
}
@@ -467,10 +473,12 @@ void dynamicPaintSurface_updateType(struct DynamicPaintSurface *surface)
surface_setUniqueOutputName(surface, surface->output_name, 0);
/* update preview */
- if (dynamicPaint_surfaceHasColorPreview(surface))
+ if (dynamicPaint_surfaceHasColorPreview(surface)) {
dynamicPaint_setPreview(surface);
- else
+ }
+ else {
dynamicPaint_resetPreview(surface->canvas);
+ }
}
static int surface_totalSamples(DynamicPaintSurface *surface)
@@ -565,8 +573,9 @@ static int surface_getBrushFlags(DynamicPaintSurface *surface, Depsgraph *depsgr
if (pmd2->brush) {
DynamicPaintBrushSettings *brush = pmd2->brush;
- if (brush->flags & MOD_DPAINT_USES_VELOCITY)
+ if (brush->flags & MOD_DPAINT_USES_VELOCITY) {
flags |= BRUSH_USES_VELOCITY;
+ }
}
}
}
@@ -579,11 +588,13 @@ static int surface_getBrushFlags(DynamicPaintSurface *surface, Depsgraph *depsgr
/* check whether two bounds intersect */
static bool boundsIntersect(Bounds3D *b1, Bounds3D *b2)
{
- if (!b1->valid || !b2->valid)
+ if (!b1->valid || !b2->valid) {
return false;
+ }
for (int i = 2; i--;) {
- if (!(b1->min[i] <= b2->max[i] && b1->max[i] >= b2->min[i]))
+ if (!(b1->min[i] <= b2->max[i] && b1->max[i] >= b2->min[i])) {
return false;
+ }
}
return true;
}
@@ -591,11 +602,13 @@ static bool boundsIntersect(Bounds3D *b1, Bounds3D *b2)
/* check whether two bounds intersect inside defined proximity */
static bool boundsIntersectDist(Bounds3D *b1, Bounds3D *b2, const float dist)
{
- if (!b1->valid || !b2->valid)
+ if (!b1->valid || !b2->valid) {
return false;
+ }
for (int i = 2; i--;) {
- if (!(b1->min[i] <= (b2->max[i] + dist) && b1->max[i] >= (b2->min[i] - dist)))
+ if (!(b1->min[i] <= (b2->max[i] + dist) && b1->max[i] >= (b2->min[i] - dist))) {
return false;
+ }
}
return true;
}
@@ -603,11 +616,13 @@ static bool boundsIntersectDist(Bounds3D *b1, Bounds3D *b2, const float dist)
/* check whether bounds intersects a point with given radius */
static bool boundIntersectPoint(Bounds3D *b, float point[3], const float radius)
{
- if (!b->valid)
+ if (!b->valid) {
return false;
+ }
for (int i = 2; i--;) {
- if (!(b->min[i] <= (point[i] + radius) && b->max[i] >= (point[i] - radius)))
+ if (!(b->min[i] <= (point[i] + radius) && b->max[i] >= (point[i] - radius))) {
return false;
+ }
}
return true;
}
@@ -636,14 +651,18 @@ static void freeGrid(PaintSurfaceData *data)
PaintBakeData *bData = data->bData;
VolumeGrid *grid = bData->grid;
- if (grid->bounds)
+ if (grid->bounds) {
MEM_freeN(grid->bounds);
- if (grid->s_pos)
+ }
+ if (grid->s_pos) {
MEM_freeN(grid->s_pos);
- if (grid->s_num)
+ }
+ if (grid->s_num) {
MEM_freeN(grid->s_num);
- if (grid->t_index)
+ }
+ if (grid->t_index) {
MEM_freeN(grid->t_index);
+ }
MEM_freeN(bData->grid);
bData->grid = NULL;
@@ -738,8 +757,9 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
int *temp_t_index = NULL;
int *temp_s_num = NULL;
- if (bData->grid)
+ if (bData->grid) {
freeGrid(sData);
+ }
bData->grid = MEM_callocN(sizeof(VolumeGrid), "Surface Grid");
grid = bData->grid;
@@ -808,8 +828,9 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
/* in case of an allocation failure abort here */
if (!grid->bounds || !grid->s_pos || !grid->s_num || !grid->t_index || !temp_s_num ||
- !temp_t_index)
+ !temp_t_index) {
error = 1;
+ }
if (!error) {
/* calculate number of points within each cell */
@@ -845,10 +866,12 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
}
}
- if (temp_s_num)
+ if (temp_s_num) {
MEM_freeN(temp_s_num);
- if (temp_t_index)
+ }
+ if (temp_t_index) {
MEM_freeN(temp_t_index);
+ }
grid->temp_t_index = NULL;
if (error || !grid->s_num) {
@@ -864,10 +887,12 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
void dynamicPaint_freeBrush(struct DynamicPaintModifierData *pmd)
{
if (pmd->brush) {
- if (pmd->brush->paint_ramp)
+ if (pmd->brush->paint_ramp) {
MEM_freeN(pmd->brush->paint_ramp);
- if (pmd->brush->vel_ramp)
+ }
+ if (pmd->brush->vel_ramp) {
MEM_freeN(pmd->brush->vel_ramp);
+ }
MEM_freeN(pmd->brush);
pmd->brush = NULL;
@@ -877,16 +902,21 @@ void dynamicPaint_freeBrush(struct DynamicPaintModifierData *pmd)
static void dynamicPaint_freeAdjData(PaintSurfaceData *data)
{
if (data->adj_data) {
- if (data->adj_data->n_index)
+ if (data->adj_data->n_index) {
MEM_freeN(data->adj_data->n_index);
- if (data->adj_data->n_num)
+ }
+ if (data->adj_data->n_num) {
MEM_freeN(data->adj_data->n_num);
- if (data->adj_data->n_target)
+ }
+ if (data->adj_data->n_target) {
MEM_freeN(data->adj_data->n_target);
- if (data->adj_data->flags)
+ }
+ if (data->adj_data->flags) {
MEM_freeN(data->adj_data->flags);
- if (data->adj_data->border)
+ }
+ if (data->adj_data->border) {
MEM_freeN(data->adj_data->border);
+ }
MEM_freeN(data->adj_data);
data->adj_data = NULL;
}
@@ -896,24 +926,33 @@ static void free_bakeData(PaintSurfaceData *data)
{
PaintBakeData *bData = data->bData;
if (bData) {
- if (bData->bNormal)
+ if (bData->bNormal) {
MEM_freeN(bData->bNormal);
- if (bData->s_pos)
+ }
+ if (bData->s_pos) {
MEM_freeN(bData->s_pos);
- if (bData->s_num)
+ }
+ if (bData->s_num) {
MEM_freeN(bData->s_num);
- if (bData->realCoord)
+ }
+ if (bData->realCoord) {
MEM_freeN(bData->realCoord);
- if (bData->bNeighs)
+ }
+ if (bData->bNeighs) {
MEM_freeN(bData->bNeighs);
- if (bData->grid)
+ }
+ if (bData->grid) {
freeGrid(data);
- if (bData->prev_verts)
+ }
+ if (bData->prev_verts) {
MEM_freeN(bData->prev_verts);
- if (bData->velocity)
+ }
+ if (bData->velocity) {
MEM_freeN(bData->velocity);
- if (bData->prev_velocity)
+ }
+ if (bData->prev_velocity) {
MEM_freeN(bData->prev_velocity);
+ }
MEM_freeN(data->bData);
data->bData = NULL;
@@ -923,8 +962,9 @@ static void free_bakeData(PaintSurfaceData *data)
/* free surface data if it's not used anymore */
static void surface_freeUnusedData(DynamicPaintSurface *surface)
{
- if (!surface->data)
+ if (!surface->data) {
return;
+ }
/* free bakedata if not active or surface is baked */
if (!(surface->flags & MOD_DPAINT_ACTIVE) ||
@@ -936,23 +976,27 @@ static void surface_freeUnusedData(DynamicPaintSurface *surface)
void dynamicPaint_freeSurfaceData(DynamicPaintSurface *surface)
{
PaintSurfaceData *data = surface->data;
- if (!data)
+ if (!data) {
return;
+ }
if (data->format_data) {
/* format specific free */
if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
ImgSeqFormatData *format_data = (ImgSeqFormatData *)data->format_data;
- if (format_data->uv_p)
+ if (format_data->uv_p) {
MEM_freeN(format_data->uv_p);
- if (format_data->barycentricWeights)
+ }
+ if (format_data->barycentricWeights) {
MEM_freeN(format_data->barycentricWeights);
+ }
}
MEM_freeN(data->format_data);
}
/* type data */
- if (data->type_data)
+ if (data->type_data) {
MEM_freeN(data->type_data);
+ }
dynamicPaint_freeAdjData(data);
/* bake data */
free_bakeData(data);
@@ -969,8 +1013,9 @@ void dynamicPaint_freeSurface(const DynamicPaintModifierData *pmd, DynamicPaintS
}
surface->pointcache = NULL;
- if (surface->effector_weights)
+ if (surface->effector_weights) {
MEM_freeN(surface->effector_weights);
+ }
surface->effector_weights = NULL;
BLI_remlink(&(surface->canvas->surfaces), surface);
@@ -1019,8 +1064,9 @@ DynamicPaintSurface *dynamicPaint_createNewSurface(DynamicPaintCanvasSettings *c
Scene *scene)
{
DynamicPaintSurface *surface = MEM_callocN(sizeof(DynamicPaintSurface), "DynamicPaintSurface");
- if (!surface)
+ if (!surface) {
return NULL;
+ }
surface->canvas = canvas;
surface->format = MOD_DPAINT_SURFACE_F_VERTEX;
@@ -1099,27 +1145,32 @@ bool dynamicPaint_createType(struct DynamicPaintModifierData *pmd, int type, str
if (pmd) {
if (type == MOD_DYNAMICPAINT_TYPE_CANVAS) {
DynamicPaintCanvasSettings *canvas;
- if (pmd->canvas)
+ if (pmd->canvas) {
dynamicPaint_freeCanvas(pmd);
+ }
canvas = pmd->canvas = MEM_callocN(sizeof(DynamicPaintCanvasSettings),
"DynamicPaint Canvas");
- if (!canvas)
+ if (!canvas) {
return false;
+ }
canvas->pmd = pmd;
/* Create one surface */
- if (!dynamicPaint_createNewSurface(canvas, scene))
+ if (!dynamicPaint_createNewSurface(canvas, scene)) {
return false;
+ }
}
else if (type == MOD_DYNAMICPAINT_TYPE_BRUSH) {
DynamicPaintBrushSettings *brush;
- if (pmd->brush)
+ if (pmd->brush) {
dynamicPaint_freeBrush(pmd);
+ }
brush = pmd->brush = MEM_callocN(sizeof(DynamicPaintBrushSettings), "DynamicPaint Paint");
- if (!brush)
+ if (!brush) {
return false;
+ }
brush->pmd = pmd;
brush->psys = NULL;
@@ -1150,8 +1201,9 @@ bool dynamicPaint_createType(struct DynamicPaintModifierData *pmd, int type, str
CBData *ramp;
brush->paint_ramp = BKE_colorband_add(false);
- if (!brush->paint_ramp)
+ if (!brush->paint_ramp) {
return false;
+ }
ramp = brush->paint_ramp->data;
/* Add default smooth-falloff ramp. */
ramp[0].r = ramp[0].g = ramp[0].b = ramp[0].a = 1.0f;
@@ -1166,8 +1218,9 @@ bool dynamicPaint_createType(struct DynamicPaintModifierData *pmd, int type, str
CBData *ramp;
brush->vel_ramp = BKE_colorband_add(false);
- if (!brush->vel_ramp)
+ if (!brush->vel_ramp) {
return false;
+ }
ramp = brush->vel_ramp->data;
ramp[0].r = ramp[0].g = ramp[0].b = ramp[0].a = ramp[0].pos = 0.0f;
ramp[1].r = ramp[1].g = ramp[1].b = ramp[1].a = ramp[1].pos = 1.0f;
@@ -1188,18 +1241,21 @@ void dynamicPaint_Modifier_copy(const struct DynamicPaintModifierData *pmd,
{
/* Init modifier */
tpmd->type = pmd->type;
- if (pmd->canvas)
+ if (pmd->canvas) {
dynamicPaint_createType(tpmd, MOD_DYNAMICPAINT_TYPE_CANVAS, NULL);
- if (pmd->brush)
+ }
+ if (pmd->brush) {
dynamicPaint_createType(tpmd, MOD_DYNAMICPAINT_TYPE_BRUSH, NULL);
+ }
/* Copy data */
if (tpmd->canvas) {
DynamicPaintSurface *surface;
tpmd->canvas->pmd = tpmd;
/* free default surface */
- if (tpmd->canvas->surfaces.first)
+ if (tpmd->canvas->surfaces.first) {
dynamicPaint_freeSurface(tpmd, tpmd->canvas->surfaces.first);
+ }
/* copy existing surfaces */
for (surface = pmd->canvas->surfaces.first; surface; surface = surface->next) {
@@ -1287,10 +1343,12 @@ void dynamicPaint_Modifier_copy(const struct DynamicPaintModifierData *pmd,
t_brush->paint_distance = brush->paint_distance;
t_brush->psys = brush->psys;
- if (brush->paint_ramp)
+ if (brush->paint_ramp) {
memcpy(t_brush->paint_ramp, brush->paint_ramp, sizeof(ColorBand));
- if (brush->vel_ramp)
+ }
+ if (brush->vel_ramp) {
memcpy(t_brush->vel_ramp, brush->vel_ramp, sizeof(ColorBand));
+ }
t_brush->proximity_falloff = brush->proximity_falloff;
t_brush->wave_type = brush->wave_type;
@@ -1327,8 +1385,9 @@ static void dynamicPaint_allocateSurfaceType(DynamicPaintSurface *surface)
break;
}
- if (sData->type_data == NULL)
+ if (sData->type_data == NULL) {
setError(surface->canvas, N_("Not enough free memory"));
+ }
}
static bool surface_usesAdjDistance(DynamicPaintSurface *surface)
@@ -1352,8 +1411,9 @@ static void dynamicPaint_initAdjacencyData(DynamicPaintSurface *surface, const b
int *temp_data;
int neigh_points = 0;
- if (!force_init && !surface_usesAdjData(surface))
+ if (!force_init && !surface_usesAdjData(surface)) {
return;
+ }
if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
/* For vertex format, neighbors are connected by edges */
@@ -1363,13 +1423,15 @@ static void dynamicPaint_initAdjacencyData(DynamicPaintSurface *surface, const b
neigh_points = sData->total_points * 8;
}
- if (!neigh_points)
+ if (!neigh_points) {
return;
+ }
/* allocate memory */
ad = sData->adj_data = MEM_callocN(sizeof(PaintAdjData), "Surface Adj Data");
- if (!ad)
+ if (!ad) {
return;
+ }
ad->n_index = MEM_callocN(sizeof(int) * sData->total_points, "Surface Adj Index");
ad->n_num = MEM_callocN(sizeof(int) * sData->total_points, "Surface Adj Counts");
temp_data = MEM_callocN(sizeof(int) * sData->total_points, "Temp Adj Data");
@@ -1382,8 +1444,9 @@ static void dynamicPaint_initAdjacencyData(DynamicPaintSurface *surface, const b
/* in case of allocation error, free memory */
if (!ad->n_index || !ad->n_num || !ad->n_target || !temp_data) {
dynamicPaint_freeAdjData(sData);
- if (temp_data)
+ if (temp_data) {
MEM_freeN(temp_data);
+ }
setError(surface->canvas, N_("Not enough free memory"));
return;
}
@@ -1579,11 +1642,13 @@ static void dynamicPaint_setInitialColor(const Scene *scene, DynamicPaintSurface
int i;
const bool scene_color_manage = BKE_scene_check_color_management_enabled(scene);
- if (surface->type != MOD_DPAINT_SURFACE_T_PAINT)
+ if (surface->type != MOD_DPAINT_SURFACE_T_PAINT) {
return;
+ }
- if (surface->init_color_type == MOD_DPAINT_INITIAL_NONE)
+ if (surface->init_color_type == MOD_DPAINT_INITIAL_NONE) {
return;
+ }
/* Single color */
if (surface->init_color_type == MOD_DPAINT_INITIAL_COLOR) {
@@ -1603,14 +1668,16 @@ static void dynamicPaint_setInitialColor(const Scene *scene, DynamicPaintSurface
char uvname[MAX_CUSTOMDATA_LAYER_NAME];
- if (!tex)
+ if (!tex) {
return;
+ }
/* get uv map */
CustomData_validate_layer_name(&mesh->ldata, CD_MLOOPUV, surface->init_layername, uvname);
mloopuv = CustomData_get_layer_named(&mesh->ldata, CD_MLOOPUV, uvname);
- if (!mloopuv)
+ if (!mloopuv) {
return;
+ }
/* for vertex surface loop through tfaces and find uv color
* that provides highest alpha */
@@ -1655,8 +1722,9 @@ static void dynamicPaint_setInitialColor(const Scene *scene, DynamicPaintSurface
const int totloop = mesh->totloop;
const MLoopCol *col = CustomData_get_layer_named(
&mesh->ldata, CD_MLOOPCOL, surface->init_layername);
- if (!col)
+ if (!col) {
return;
+ }
for (i = 0; i < totloop; i++) {
rgba_uchar_to_float(pPoint[mloop[i].v].color, (const unsigned char *)&col[mloop[i].v].r);
@@ -1666,8 +1734,9 @@ static void dynamicPaint_setInitialColor(const Scene *scene, DynamicPaintSurface
const MLoopTri *mlooptri = BKE_mesh_runtime_looptri_ensure(mesh);
MLoopCol *col = CustomData_get_layer_named(
&mesh->ldata, CD_MLOOPCOL, surface->init_layername);
- if (!col)
+ if (!col) {
return;
+ }
DynamicPaintSetInitColorData data = {
.surface = surface,
@@ -1690,21 +1759,26 @@ void dynamicPaint_clearSurface(const Scene *scene, DynamicPaintSurface *surface)
if (sData && sData->type_data) {
unsigned int data_size;
- if (surface->type == MOD_DPAINT_SURFACE_T_PAINT)
+ if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
data_size = sizeof(PaintPoint);
- else if (surface->type == MOD_DPAINT_SURFACE_T_WAVE)
+ }
+ else if (surface->type == MOD_DPAINT_SURFACE_T_WAVE) {
data_size = sizeof(PaintWavePoint);
- else
+ }
+ else {
data_size = sizeof(float);
+ }
memset(sData->type_data, 0, data_size * sData->total_points);
/* set initial color */
- if (surface->type == MOD_DPAINT_SURFACE_T_PAINT)
+ if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
dynamicPaint_setInitialColor(scene, surface);
+ }
- if (sData->bData)
+ if (sData->bData) {
sData->bData->clear = 1;
+ }
}
}
@@ -1713,19 +1787,23 @@ bool dynamicPaint_resetSurface(const Scene *scene, DynamicPaintSurface *surface)
{
int numOfPoints = dynamicPaint_surfaceNumOfPoints(surface);
/* free existing data */
- if (surface->data)
+ if (surface->data) {
dynamicPaint_freeSurfaceData(surface);
+ }
/* don't reallocate for image sequence types. they get handled only on bake */
- if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ)
+ if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
return true;
- if (numOfPoints < 1)
+ }
+ if (numOfPoints < 1) {
return false;
+ }
/* allocate memory */
surface->data = MEM_callocN(sizeof(PaintSurfaceData), "PaintSurfaceData");
- if (!surface->data)
+ if (!surface->data) {
return false;
+ }
/* allocate data depending on surface type and format */
surface->data->total_points = numOfPoints;
@@ -1733,8 +1811,9 @@ bool dynamicPaint_resetSurface(const Scene *scene, DynamicPaintSurface *surface)
dynamicPaint_initAdjacencyData(surface, false);
/* set initial color */
- if (surface->type == MOD_DPAINT_SURFACE_T_PAINT)
+ if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
dynamicPaint_setInitialColor(scene, surface);
+ }
return true;
}
@@ -1789,8 +1868,9 @@ static void dynamicPaint_applySurfaceDisplace(DynamicPaintSurface *surface, Mesh
{
PaintSurfaceData *sData = surface->data;
- if (!sData || surface->format != MOD_DPAINT_SURFACE_F_VERTEX)
+ if (!sData || surface->format != MOD_DPAINT_SURFACE_F_VERTEX) {
return;
+ }
/* displace paint */
if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE) {
@@ -1925,8 +2005,9 @@ static Mesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData *pmd, Object *
PaintSurfaceData *sData = surface->data;
if (surface->format != MOD_DPAINT_SURFACE_F_IMAGESEQ && sData) {
- if (!(surface->flags & MOD_DPAINT_ACTIVE))
+ if (!(surface->flags & MOD_DPAINT_ACTIVE)) {
continue;
+ }
/* process vertex surface previews */
if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
@@ -2121,8 +2202,9 @@ static void dynamicPaint_frameUpdate(DynamicPaintModifierData *pmd,
canvas_copyMesh(canvas, mesh);
/* in case image sequence baking, stop here */
- if (canvas->flags & MOD_DPAINT_BAKING)
+ if (canvas->flags & MOD_DPAINT_BAKING) {
return;
+ }
/* loop through surfaces */
for (; surface; surface = surface->next) {
@@ -2134,13 +2216,15 @@ static void dynamicPaint_frameUpdate(DynamicPaintModifierData *pmd,
/* image sequences are handled by bake operator */
if ((surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) ||
- !(surface->flags & MOD_DPAINT_ACTIVE))
+ !(surface->flags & MOD_DPAINT_ACTIVE)) {
continue;
+ }
/* make sure surface is valid */
no_surface_data = surface->data == NULL;
- if (!dynamicPaint_checkSurfaceData(scene, surface))
+ if (!dynamicPaint_checkSurfaceData(scene, surface)) {
continue;
+ }
/* limit frame range */
CLAMP(current_frame, surface->start_frame, surface->end_frame);
@@ -2426,8 +2510,9 @@ static void dynamic_paint_create_uv_surface_neighbor_cb(
}
/* Increase the final number of active surface points if relevant. */
- if (tPoint->tri_index != -1)
+ if (tPoint->tri_index != -1) {
atomic_add_and_fetch_uint32(active_points, 1);
+ }
}
}
@@ -2492,16 +2577,18 @@ static int dynamic_paint_find_neighbour_pixel(const DynamicPaintCreateUVSurfaceD
const int x = px + neighX[n_index];
const int y = py + neighY[n_index];
- if (x < 0 || x >= w || y < 0 || y >= h)
+ if (x < 0 || x >= w || y < 0 || y >= h) {
return OUT_OF_TEXTURE;
+ }
const PaintUVPoint *tempPoints = data->tempPoints;
const PaintUVPoint *tPoint = &tempPoints[x + w * y]; /* UV neighbor */
const PaintUVPoint *cPoint = &tempPoints[px + w * py]; /* Origin point */
/* Check if shifted point is on same face -> it's a correct neighbor (and if it isn't marked as an "edge pixel") */
- if ((tPoint->tri_index == cPoint->tri_index) && (tPoint->neighbour_pixel == -1))
+ if ((tPoint->tri_index == cPoint->tri_index) && (tPoint->neighbour_pixel == -1)) {
return (x + w * y);
+ }
/* Even if shifted point is on another face
* -> use this point.
@@ -2561,8 +2648,9 @@ static void dynamic_paint_find_island_border(const DynamicPaintCreateUVSurfaceDa
/* Enumerate all edges of the triangle, rotating the vertex list accordingly. */
for (int edge_idx = 0; edge_idx < 3; edge_idx++) {
/* but not the edge we have just recursed through */
- if (edge_idx == in_edge)
+ if (edge_idx == in_edge) {
continue;
+ }
float uv0[2], uv1[2], uv2[2];
@@ -2575,16 +2663,18 @@ static void dynamic_paint_find_island_border(const DynamicPaintCreateUVSurfaceDa
const float sidep = line_point_side_v2(uv0, uv1, pixel);
const float side2 = line_point_side_v2(uv0, uv1, uv2);
- if (side2 == 0.0f)
+ if (side2 == 0.0f) {
continue;
+ }
/* Hack: allow all edges of the original triangle */
const bool correct_side = (in_edge == -1) || (sidep < 0 && side2 > 0) ||
(sidep > 0 && side2 < 0);
/* Allow exactly on edge for the non-recursive case */
- if (!correct_side && sidep != 0.0f)
+ if (!correct_side && sidep != 0.0f) {
continue;
+ }
/* Now find another face that is linked to that edge. */
const int vert0 = mloop[loop_idx[(edge_idx + 0)]].v;
@@ -2602,8 +2692,9 @@ static void dynamic_paint_find_island_border(const DynamicPaintCreateUVSurfaceDa
for (int i = 0; i < map->count && !found_other; i++) {
const int lt_index = map->indices[i];
- if (lt_index == tri_index)
+ if (lt_index == tri_index) {
continue;
+ }
const unsigned int *other_loop_idx = mlooptri[lt_index].tri;
@@ -2633,8 +2724,9 @@ static void dynamic_paint_find_island_border(const DynamicPaintCreateUVSurfaceDa
}
if (!found_other) {
- if (bdata->best_index < 0)
+ if (bdata->best_index < 0) {
bdata->best_index = ON_MESH_EDGE;
+ }
continue;
}
@@ -2652,8 +2744,9 @@ static void dynamic_paint_find_island_border(const DynamicPaintCreateUVSurfaceDa
* First check if there already is a better solution. */
const float dist_squared = dist_squared_to_line_segment_v2(pixel, uv0, uv1);
- if (bdata->best_index >= 0 && dist_squared >= bdata->best_weight)
+ if (bdata->best_index >= 0 && dist_squared >= bdata->best_weight) {
continue;
+ }
/*
* Find a point that is relatively at same edge position
@@ -2673,8 +2766,9 @@ static void dynamic_paint_find_island_border(const DynamicPaintCreateUVSurfaceDa
/* If current pixel uv is outside of texture */
if (final_pixel[0] < 0 || final_pixel[0] >= w || final_pixel[1] < 0 || final_pixel[1] >= h) {
- if (bdata->best_index == NOT_FOUND)
+ if (bdata->best_index == NOT_FOUND) {
bdata->best_index = OUT_OF_TEXTURE;
+ }
continue;
}
@@ -2683,16 +2777,18 @@ static void dynamic_paint_find_island_border(const DynamicPaintCreateUVSurfaceDa
int final_index = final_pixel[0] + w * final_pixel[1];
/* If we ended up to our origin point ( mesh has smaller than pixel sized faces) */
- if (final_index == (px + w * py))
+ if (final_index == (px + w * py)) {
continue;
+ }
/* If final point is an "edge pixel", use it's "real" neighbor instead */
if (tempPoints[final_index].neighbour_pixel != -1) {
final_index = tempPoints[final_index].neighbour_pixel;
/* If we ended up to our origin point */
- if (final_index == (px + w * py))
+ if (final_index == (px + w * py)) {
continue;
+ }
}
/* If found pixel still lies on wrong face ( mesh has smaller than pixel sized faces) */
@@ -2703,8 +2799,9 @@ static void dynamic_paint_find_island_border(const DynamicPaintCreateUVSurfaceDa
const float threshold = SQUARE(0.7f) / (w * h);
if (dist_squared_to_looptri_uv_edges(
- mlooptri, mloopuv, tempPoints[final_index].tri_index, final_pt) > threshold)
+ mlooptri, mloopuv, tempPoints[final_index].tri_index, final_pt) > threshold) {
continue;
+ }
}
bdata->best_index = final_index;
@@ -2808,10 +2905,12 @@ static bool dynamicPaint_symmetrizeAdjData(PaintAdjData *ed, int active_points)
}
}
- if (new_n_index)
+ if (new_n_index) {
MEM_freeN(new_n_index);
- if (new_n_num)
+ }
+ if (new_n_num) {
MEM_freeN(new_n_num);
+ }
return false;
}
@@ -2843,10 +2942,12 @@ int dynamicPaint_createUVSurface(Scene *scene,
*progress = 0.0f;
*do_update = true;
- if (!mesh)
+ if (!mesh) {
return setError(canvas, N_("Canvas mesh not updated"));
- if (surface->format != MOD_DPAINT_SURFACE_F_IMAGESEQ)
+ }
+ if (surface->format != MOD_DPAINT_SURFACE_F_IMAGESEQ) {
return setError(canvas, N_("Cannot bake non-'image sequence' formats"));
+ }
mloop = mesh->mloop;
mlooptri = BKE_mesh_runtime_looptri_ensure(mesh);
@@ -2859,10 +2960,12 @@ int dynamicPaint_createUVSurface(Scene *scene,
}
/* Check for validity */
- if (!mloopuv)
+ if (!mloopuv) {
return setError(canvas, N_("No UV data on canvas"));
- if (surface->image_resolution < 16 || surface->image_resolution > 8192)
+ }
+ if (surface->image_resolution < 16 || surface->image_resolution > 8192) {
return setError(canvas, N_("Invalid resolution"));
+ }
const int w = surface->image_resolution;
const int h = w;
@@ -2873,23 +2976,28 @@ int dynamicPaint_createUVSurface(Scene *scene,
CLOG_INFO(&LOG, 1, "Preparing UV surface of %ix%i pixels and %i tris.", w, h, tottri);
/* Init data struct */
- if (surface->data)
+ if (surface->data) {
dynamicPaint_freeSurfaceData(surface);
+ }
sData = surface->data = MEM_callocN(sizeof(PaintSurfaceData), "PaintSurfaceData");
- if (!surface->data)
+ if (!surface->data) {
return setError(canvas, N_("Not enough free memory"));
+ }
tempPoints = MEM_callocN(w * h * sizeof(*tempPoints), "Temp PaintUVPoint");
- if (!tempPoints)
+ if (!tempPoints) {
error = true;
+ }
final_index = MEM_callocN(w * h * sizeof(*final_index), "Temp UV Final Indexes");
- if (!final_index)
+ if (!final_index) {
error = true;
+ }
tempWeights = MEM_mallocN(w * h * aa_samples * sizeof(*tempWeights), "Temp bWeights");
- if (!tempWeights)
+ if (!tempWeights) {
error = true;
+ }
/*
* Generate a temporary bounding box array for UV faces to optimize
@@ -2897,8 +3005,9 @@ int dynamicPaint_createUVSurface(Scene *scene,
*/
if (!error) {
faceBB = MEM_mallocN(tottri * sizeof(*faceBB), "MPCanvasFaceBB");
- if (!faceBB)
+ if (!faceBB) {
error = true;
+ }
}
*progress = 0.01f;
@@ -3097,8 +3206,9 @@ int dynamicPaint_createUVSurface(Scene *scene,
f_data->barycentricWeights = MEM_callocN(
active_points * aa_samples * sizeof(*f_data->barycentricWeights), "PaintUVPoint");
- if (!f_data->uv_p || !f_data->barycentricWeights)
+ if (!f_data->uv_p || !f_data->barycentricWeights) {
error = 1;
+ }
}
else {
error = 1;
@@ -3107,10 +3217,12 @@ int dynamicPaint_createUVSurface(Scene *scene,
/* in case of allocation error, free everything */
if (error) {
if (f_data) {
- if (f_data->uv_p)
+ if (f_data->uv_p) {
MEM_freeN(f_data->uv_p);
- if (f_data->barycentricWeights)
+ }
+ if (f_data->barycentricWeights) {
MEM_freeN(f_data->barycentricWeights);
+ }
MEM_freeN(f_data);
}
sData->total_points = 0;
@@ -3130,17 +3242,22 @@ int dynamicPaint_createUVSurface(Scene *scene,
}
}
}
- if (error == 1)
+ if (error == 1) {
setError(canvas, N_("Not enough free memory"));
+ }
- if (faceBB)
+ if (faceBB) {
MEM_freeN(faceBB);
- if (tempPoints)
+ }
+ if (tempPoints) {
MEM_freeN(tempPoints);
- if (tempWeights)
+ }
+ if (tempWeights) {
MEM_freeN(tempWeights);
- if (final_index)
+ }
+ if (final_index) {
MEM_freeN(final_index);
+ }
/* Init surface type data */
if (!error) {
@@ -3219,8 +3336,9 @@ static void dynamic_paint_output_surface_image_displace_cb(
/* image buffer position */
const int pos = ((ImgSeqFormatData *)(surface->data->format_data))->uv_p[index].pixel_index * 4;
- if (surface->depth_clamp)
+ if (surface->depth_clamp) {
depth /= surface->depth_clamp;
+ }
if (surface->disp_type == MOD_DPAINT_DISP_DISPLACE) {
depth = (0.5f - depth / 2.0f);
@@ -3245,8 +3363,9 @@ static void dynamic_paint_output_surface_image_wave_cb(
/* image buffer position */
const int pos = ((ImgSeqFormatData *)(surface->data->format_data))->uv_p[index].pixel_index * 4;
- if (surface->depth_clamp)
+ if (surface->depth_clamp) {
depth /= surface->depth_clamp;
+ }
depth = (0.5f + depth / 2.0f);
CLAMP(depth, 0.0f, 1.0f);
@@ -3288,8 +3407,9 @@ void dynamicPaint_outputSurfaceImage(DynamicPaintSurface *surface,
}
/* if selected format is openexr, but current build doesn't support one */
#ifndef WITH_OPENEXR
- if (format == R_IMF_IMTYPE_OPENEXR)
+ if (format == R_IMF_IMTYPE_OPENEXR) {
format = R_IMF_IMTYPE_PNG;
+ }
#endif
BLI_strncpy(output_file, filename, sizeof(output_file));
BKE_image_path_ensure_ext_from_imtype(output_file, format);
@@ -3562,10 +3682,12 @@ static void dynamicPaint_mixWaveHeight(PaintWavePoint *wPoint,
isect_height *= wave_factor;
/* determine hit depending on wave_factor */
- if (wave_factor > 0.0f && wPoint->height > isect_height)
+ if (wave_factor > 0.0f && wPoint->height > isect_height) {
hit = true;
- else if (wave_factor < 0.0f && wPoint->height < isect_height)
+ }
+ else if (wave_factor < 0.0f && wPoint->height < isect_height) {
hit = true;
+ }
if (hit) {
switch (brush->wave_type) {
@@ -3581,8 +3703,9 @@ static void dynamicPaint_mixWaveHeight(PaintWavePoint *wPoint,
wPoint->state = DPAINT_WAVE_REFLECT_ONLY;
break;
case MOD_DPAINT_WAVEB_CHANGE:
- if (isect_change < 0.0f)
+ if (isect_change < 0.0f) {
wPoint->height += isect_change * wave_factor;
+ }
break;
default:
BLI_assert(0);
@@ -3624,10 +3747,12 @@ static void dynamicPaint_updatePointData(const DynamicPaintSurface *surface,
if (brush->flags & MOD_DPAINT_VELOCITY_COLOR) {
copy_v3_v3(paint, coba_res);
}
- if (brush->flags & MOD_DPAINT_VELOCITY_ALPHA)
+ if (brush->flags & MOD_DPAINT_VELOCITY_ALPHA) {
strength *= coba_res[3];
- if (brush->flags & MOD_DPAINT_VELOCITY_DEPTH)
+ }
+ if (brush->flags & MOD_DPAINT_VELOCITY_DEPTH) {
depth *= coba_res[3];
+ }
}
}
@@ -3643,8 +3768,9 @@ static void dynamicPaint_updatePointData(const DynamicPaintSurface *surface,
else if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE) {
float *value = (float *)sData->type_data;
- if (surface->flags & MOD_DPAINT_DISP_INCREMENTAL)
+ if (surface->flags & MOD_DPAINT_DISP_INCREMENTAL) {
depth = value[index] + depth;
+ }
if (surface->depth_clamp) {
CLAMP(depth, 0.0f - surface->depth_clamp, surface->depth_clamp);
@@ -3691,10 +3817,12 @@ static bool meshBrush_boundsIntersect(Bounds3D *b1,
DynamicPaintBrushSettings *brush,
float brush_radius)
{
- if (brush->collision == MOD_DPAINT_COL_VOLUME)
+ if (brush->collision == MOD_DPAINT_COL_VOLUME) {
return boundsIntersect(b1, b2);
- else if (brush->collision == MOD_DPAINT_COL_DIST || brush->collision == MOD_DPAINT_COL_VOLDIST)
+ }
+ else if (brush->collision == MOD_DPAINT_COL_DIST || brush->collision == MOD_DPAINT_COL_VOLDIST) {
return boundsIntersectDist(b1, b2, brush_radius);
+ }
return true;
}
@@ -3794,12 +3922,14 @@ static void dynamicPaint_brushMeshCalculateVelocity(Depsgraph *depsgraph,
(*brushVel) = (struct Vec3f *)MEM_mallocN(numOfVerts_c * sizeof(Vec3f),
"Dynamic Paint brush velocity");
- if (!(*brushVel))
+ if (!(*brushVel)) {
return;
+ }
/* if mesh is constructive -> num of verts has changed, only use current frame derived mesh */
- if (numOfVerts_p != numOfVerts_c)
+ if (numOfVerts_p != numOfVerts_c) {
mvert_p = mvert_c;
+ }
/* calculate speed */
DynamicPaintBrushVelocityData data = {
@@ -3930,8 +4060,9 @@ static void dynamic_paint_paint_mesh_cell_point_cb_ex(
int numOfHits = 0;
/* for image sequence anti-aliasing, use gaussian factors */
- if (samples > 1 && surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ)
+ if (samples > 1 && surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
total_sample = gaussianTotal;
+ }
/* Supersampling */
for (ss = 0; ss < samples; ss++) {
@@ -3955,10 +4086,12 @@ static void dynamic_paint_paint_mesh_cell_point_cb_ex(
int hitTri = -1;
/* Supersampling factor */
- if (samples > 1 && surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ)
+ if (samples > 1 && surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
sample_factor = gaussianFactors[ss];
- else
+ }
+ else {
sample_factor = 1.0f;
+ }
/* Get current sample position in world coordinates */
copy_v3_v3(ray_start, bData->realCoord[bData->s_pos[index] + ss].v);
@@ -4028,8 +4161,9 @@ static void dynamic_paint_paint_mesh_cell_point_cb_ex(
int tri = 0;
/* if inverse prox and no hit found, skip this sample */
- if (inner_proximity && !hit_found)
+ if (inner_proximity && !hit_found) {
continue;
+ }
/* If pure distance proximity, find the nearest point on the mesh */
if (!(brush->flags & MOD_DPAINT_PROX_PROJECT)) {
@@ -4072,8 +4206,9 @@ static void dynamic_paint_paint_mesh_cell_point_cb_ex(
if (proxDist >= 0.0f && proxDist <= brush_radius) {
proximity_factor = proxDist / brush_radius;
CLAMP(proximity_factor, 0.0f, 1.0f);
- if (!inner_proximity)
+ if (!inner_proximity) {
proximity_factor = 1.0f - proximity_factor;
+ }
hit_found = HIT_PROXIMITY;
@@ -4090,8 +4225,9 @@ static void dynamic_paint_paint_mesh_cell_point_cb_ex(
/* if "negate volume" enabled, negate all factors within volume*/
if (brush->collision == MOD_DPAINT_COL_VOLDIST && brush->flags & MOD_DPAINT_NEGATE_VOLUME) {
volume_factor = 1.0f - volume_factor;
- if (inner_proximity)
+ if (inner_proximity) {
proximity_factor = 1.0f - proximity_factor;
+ }
}
/* apply final sample depending on final hit type */
@@ -4229,9 +4365,10 @@ static int dynamicPaint_paintMesh(Depsgraph *depsgraph,
const MLoopTri *mlooptri = NULL;
const MLoop *mloop = NULL;
- if (brush->flags & MOD_DPAINT_USES_VELOCITY)
+ if (brush->flags & MOD_DPAINT_USES_VELOCITY) {
dynamicPaint_brushMeshCalculateVelocity(
depsgraph, scene, brushOb, brush, &brushVelocity, timescale);
+ }
Mesh *brush_mesh = dynamicPaint_brush_mesh_get(brush);
if (brush_mesh == NULL) {
@@ -4328,8 +4465,9 @@ static int dynamicPaint_paintMesh(Depsgraph *depsgraph,
}
/* free brush velocity data */
- if (brushVelocity)
+ if (brushVelocity) {
MEM_freeN(brushVelocity);
+ }
return 1;
}
@@ -4378,8 +4516,9 @@ static void dynamic_paint_paint_particle_cell_point_cb_ex(
/* Find nearest particle and get distance to it */
BLI_kdtree_3d_find_nearest(tree, bData->realCoord[bData->s_pos[index]].v, &nearest);
/* if outside maximum range, no other particle can influence either */
- if (nearest.dist > range)
+ if (nearest.dist > range) {
return;
+ }
if (brush->flags & MOD_DPAINT_PART_RAD) {
/* use particles individual size */
@@ -4394,8 +4533,9 @@ static void dynamic_paint_paint_particle_cell_point_cb_ex(
/* distances inside solid radius has maximum influence -> dist = 0 */
smooth_range = max_ff(0.0f, (nearest.dist - part_solidradius));
/* do smoothness if enabled */
- if (smooth)
+ if (smooth) {
smooth_range /= smooth;
+ }
strength = 1.0f - smooth_range;
disp_intersect = radius - nearest.dist;
@@ -4424,14 +4564,16 @@ static void dynamic_paint_paint_particle_cell_point_cb_ex(
ParticleData *pa = &psys->particles[nearest[n].index];
/* skip if out of range */
- if (nearest[n].dist > (pa->size + smooth))
+ if (nearest[n].dist > (pa->size + smooth)) {
continue;
+ }
/* update hit data */
const float s_range = nearest[n].dist - pa->size;
/* skip if higher influence is already found */
- if (smooth_range < s_range)
+ if (smooth_range < s_range) {
continue;
+ }
/* update hit data */
smooth_range = s_range;
@@ -4445,8 +4587,9 @@ static void dynamic_paint_paint_particle_cell_point_cb_ex(
}
}
- if (nearest)
+ if (nearest) {
MEM_freeN(nearest);
+ }
/* now calculate influence for this particle */
const float rad = radius + smooth;
@@ -4457,13 +4600,15 @@ static void dynamic_paint_paint_particle_cell_point_cb_ex(
/* do smoothness if enabled */
CLAMP_MIN(smooth_range, 0.0f);
- if (smooth)
+ if (smooth) {
smooth_range /= smooth;
+ }
const float str = 1.0f - smooth_range;
/* if influence is greater, use this one */
- if (str > strength)
+ if (str > strength) {
strength = str;
+ }
}
if (strength > 0.001f) {
@@ -4529,8 +4674,9 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface,
Bounds3D part_bb = {{0}};
- if (psys->totpart < 1)
+ if (psys->totpart < 1) {
return 1;
+ }
/*
* Build a kd-tree to optimize distance search
@@ -4554,8 +4700,9 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface,
}
/* make sure particle is close enough to canvas */
- if (!boundIntersectPoint(&grid->grid_bounds, pa->state.co, range))
+ if (!boundIntersectPoint(&grid->grid_bounds, pa->state.co, range)) {
continue;
+ }
BLI_kdtree_3d_insert(tree, p, pa->state.co);
@@ -4564,8 +4711,9 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface,
particlesAdded++;
}
- if (invalidParticles)
+ if (invalidParticles) {
CLOG_WARN(&LOG, "Invalid particle(s) found!");
+ }
/* If no suitable particles were found, exit */
if (particlesAdded < 1) {
@@ -4641,8 +4789,9 @@ static void dynamic_paint_paint_single_point_cb_ex(void *__restrict userdata,
float colorband[4] = {0.0f};
float strength;
- if (distance > brush_radius)
+ if (distance > brush_radius) {
return;
+ }
/* Smooth range or color ramp */
if (brush->proximity_falloff == MOD_DPAINT_PRFALL_SMOOTH ||
@@ -4721,8 +4870,9 @@ static int dynamicPaint_paintSinglePoint(Depsgraph *depsgraph,
float brush_radius = brush->paint_distance * surface->radius_scale;
Vec3f brushVel;
- if (brush->flags & MOD_DPAINT_USES_VELOCITY)
+ if (brush->flags & MOD_DPAINT_USES_VELOCITY) {
dynamicPaint_brushObjectCalculateVelocity(depsgraph, scene, brushOb, &brushVel, timescale);
+ }
const Mesh *brush_mesh = dynamicPaint_brush_mesh_get(brush);
const MVert *mvert = brush_mesh->mvert;
@@ -4790,15 +4940,18 @@ static void dynamicPaint_prepareAdjacencyData(DynamicPaintSurface *surface, cons
int index;
- if ((!surface_usesAdjDistance(surface) && !force_init) || !sData->adj_data)
+ if ((!surface_usesAdjDistance(surface) && !force_init) || !sData->adj_data) {
return;
+ }
- if (bData->bNeighs)
+ if (bData->bNeighs) {
MEM_freeN(bData->bNeighs);
+ }
bNeighs = bData->bNeighs = MEM_mallocN(sData->adj_data->total_targets * sizeof(*bNeighs),
"PaintEffectBake");
- if (!bNeighs)
+ if (!bNeighs) {
return;
+ }
ParallelRangeSettings settings;
BLI_parallel_range_settings_defaults(&settings);
@@ -4844,15 +4997,17 @@ static void surface_determineForceTargetPoints(const PaintSurfaceData *sData,
}
}
- if (closest_d[0] < 0.0f)
+ if (closest_d[0] < 0.0f) {
return;
+ }
/* find second closest neigh */
for (i = 0; i < numOfNeighs; i++) {
const int n_index = sData->adj_data->n_index[index] + i;
- if (n_index == closest_id[0])
+ if (n_index == closest_id[0]) {
continue;
+ }
const float dir_dot = dot_v3v3(bNeighs[n_index].dir, force);
const float closest_dot = dot_v3v3(bNeighs[n_index].dir, bNeighs[closest_id[0]].dir);
@@ -4910,8 +5065,9 @@ static void dynamicPaint_doSmudge(DynamicPaintSurface *surface,
int index, steps, step;
float eff_scale, max_velocity = 0.0f;
- if (!sData->adj_data)
+ if (!sData->adj_data) {
return;
+ }
/* find max velocity */
for (index = 0; index < sData->total_points; index++) {
@@ -4927,8 +5083,9 @@ static void dynamicPaint_doSmudge(DynamicPaintSurface *surface,
for (index = 0; index < sData->total_points; index++) {
int i;
- if (sData->adj_data->flags[index] & ADJ_BORDER_PIXEL)
+ if (sData->adj_data->flags[index] & ADJ_BORDER_PIXEL) {
continue;
+ }
PaintPoint *pPoint = &((PaintPoint *)sData->type_data)[index];
float smudge_str = bData->brush_velocity[index * 4 + 3];
@@ -4937,8 +5094,9 @@ static void dynamicPaint_doSmudge(DynamicPaintSurface *surface,
int closest_id[2];
float closest_d[2];
- if (!smudge_str)
+ if (!smudge_str) {
continue;
+ }
/* get force affect points */
surface_determineForceTargetPoints(
@@ -4954,8 +5112,9 @@ static void dynamicPaint_doSmudge(DynamicPaintSurface *surface,
(PaintPoint *)sData->type_data)[sData->adj_data->n_target[n_index]];
/* just skip if angle is too extreme */
- if (dir_dot <= 0.0f)
+ if (dir_dot <= 0.0f) {
continue;
+ }
dir_factor = dir_dot * speed_scale;
CLAMP_MAX(dir_factor, brush->smudge_strength);
@@ -5033,18 +5192,20 @@ static void dynamic_paint_prepare_effect_cb(void *__restrict userdata,
}
/* if global gravity is enabled, add it too */
- if (scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY)
+ if (scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY) {
/* also divide by 10 to about match default grav
* with default force strength (1.0). */
madd_v3_v3fl(forc,
scene->physics_settings.gravity,
surface->effector_weights->global_gravity * surface->effector_weights->weight[0] /
10.f);
+ }
/* add surface point velocity and acceleration if enabled */
if (bData->velocity) {
- if (surface->drip_vel)
+ if (surface->drip_vel) {
madd_v3_v3fl(forc, bData->velocity[index].v, surface->drip_vel * (-1.0f));
+ }
/* acceleration */
if (bData->prev_velocity && surface->drip_acc) {
@@ -5106,10 +5267,12 @@ static int dynamicPaint_prepareEffectStep(struct Depsgraph *depsgraph,
* so that just a few ultra close pixels wont up substeps to max. */
/* adjust number of required substep by fastest active effect */
- if (surface->effect & MOD_DPAINT_EFFECT_DO_SPREAD)
+ if (surface->effect & MOD_DPAINT_EFFECT_DO_SPREAD) {
spread_speed = surface->spread_speed;
- if (surface->effect & MOD_DPAINT_EFFECT_DO_SHRINK)
+ }
+ if (surface->effect & MOD_DPAINT_EFFECT_DO_SHRINK) {
shrink_speed = surface->shrink_speed;
+ }
fastest_effect = max_fff(spread_speed, shrink_speed, average_force);
avg_dist = bData->average_dist * (double)CANVAS_REL_SIZE / (double)getSurfaceDimension(sData);
@@ -5132,8 +5295,9 @@ static void dynamic_paint_effect_spread_cb(void *__restrict userdata,
const DynamicPaintSurface *surface = data->surface;
const PaintSurfaceData *sData = surface->data;
- if (sData->adj_data->flags[index] & ADJ_BORDER_PIXEL)
+ if (sData->adj_data->flags[index] & ADJ_BORDER_PIXEL) {
return;
+ }
const int numOfNeighs = sData->adj_data->n_num[index];
BakeAdjPoint *bNeighs = sData->bData->bNeighs;
@@ -5155,16 +5319,18 @@ static void dynamic_paint_effect_spread_cb(void *__restrict userdata,
surface->color_spread_speed;
/* do color mixing */
- if (color_mix)
+ if (color_mix) {
mixColors(pPoint->e_color,
pPoint->e_color[3],
pPoint_prev->e_color,
pPoint_prev->e_color[3],
color_mix);
+ }
/* Only continue if surrounding point has higher wetness */
- if (pPoint_prev->wetness < pPoint->wetness || pPoint_prev->wetness < MIN_WETNESS)
+ if (pPoint_prev->wetness < pPoint->wetness || pPoint_prev->wetness < MIN_WETNESS) {
continue;
+ }
w_factor = 1.0f / numOfNeighs * min_ff(pPoint_prev->wetness, 1.0f) * speed_scale;
CLAMP(w_factor, 0.0f, 1.0f);
@@ -5188,8 +5354,9 @@ static void dynamic_paint_effect_shrink_cb(void *__restrict userdata,
const DynamicPaintSurface *surface = data->surface;
const PaintSurfaceData *sData = surface->data;
- if (sData->adj_data->flags[index] & ADJ_BORDER_PIXEL)
+ if (sData->adj_data->flags[index] & ADJ_BORDER_PIXEL) {
return;
+ }
const int numOfNeighs = sData->adj_data->n_num[index];
BakeAdjPoint *bNeighs = sData->bData->bNeighs;
@@ -5213,8 +5380,9 @@ static void dynamic_paint_effect_shrink_cb(void *__restrict userdata,
/* Check if neighboring point has lower alpha,
* if so, decrease this point's alpha as well. */
- if (pPoint->color[3] <= 0.0f && pPoint->e_color[3] <= 0.0f && pPoint->wetness <= 0.0f)
+ if (pPoint->color[3] <= 0.0f && pPoint->e_color[3] <= 0.0f && pPoint->wetness <= 0.0f) {
continue;
+ }
/* decrease factor for dry paint alpha */
a_factor = max_ff((1.0f - pPoint_prev->color[3]) / numOfNeighs *
@@ -5247,8 +5415,9 @@ static void dynamic_paint_effect_drip_cb(void *__restrict userdata,
const DynamicPaintSurface *surface = data->surface;
const PaintSurfaceData *sData = surface->data;
- if (sData->adj_data->flags[index] & ADJ_BORDER_PIXEL)
+ if (sData->adj_data->flags[index] & ADJ_BORDER_PIXEL) {
return;
+ }
BakeAdjPoint *bNeighs = sData->bData->bNeighs;
PaintPoint *pPoint = &((PaintPoint *)sData->type_data)[index];
@@ -5266,8 +5435,9 @@ static void dynamic_paint_effect_drip_cb(void *__restrict userdata,
/* adjust drip speed depending on wetness */
float w_factor = pPoint_prev->wetness - 0.025f;
- if (w_factor <= 0)
+ if (w_factor <= 0) {
return;
+ }
CLAMP(w_factor, 0.0f, 1.0f);
float ppoint_wetness_diff = 0.0f;
@@ -5282,8 +5452,9 @@ static void dynamic_paint_effect_drip_cb(void *__restrict userdata,
const float dir_dot = closest_d[i];
/* just skip if angle is too extreme */
- if (dir_dot <= 0.0f)
+ if (dir_dot <= 0.0f) {
continue;
+ }
float dir_factor, a_factor;
const float speed_scale = eff_scale * force[index * 4 + 3] / bNeighs[n_idx].dist;
@@ -5296,8 +5467,9 @@ static void dynamic_paint_effect_drip_cb(void *__restrict userdata,
const unsigned int epointlock_idx = n_trgt / 8;
const uint8_t epointlock_bitmask = 1 << (n_trgt & 7); /* 7 == 0b111 */
while (atomic_fetch_and_or_uint8(&point_locks[epointlock_idx], epointlock_bitmask) &
- epointlock_bitmask)
+ epointlock_bitmask) {
;
+ }
PaintPoint *ePoint = &((PaintPoint *)sData->type_data)[n_trgt];
const float e_wet = ePoint->wetness;
@@ -5342,8 +5514,9 @@ static void dynamic_paint_effect_drip_cb(void *__restrict userdata,
const unsigned int ppointlock_idx = index / 8;
const uint8_t ppointlock_bitmask = 1 << (index & 7); /* 7 == 0b111 */
while (atomic_fetch_and_or_uint8(&point_locks[ppointlock_idx], ppointlock_bitmask) &
- ppointlock_bitmask)
+ ppointlock_bitmask) {
;
+ }
pPoint->wetness -= ppoint_wetness_diff;
CLAMP(pPoint->wetness, 0.0f, MAX_WETNESS);
@@ -5370,8 +5543,9 @@ static void dynamicPaint_doEffectStep(DynamicPaintSurface *surface,
const float distance_scale = getSurfaceDimension(sData) / CANVAS_REL_SIZE;
timescale /= steps;
- if (!sData->adj_data)
+ if (!sData->adj_data) {
return;
+ }
/*
* Spread Effect
@@ -5511,8 +5685,9 @@ static void dynamicPaint_doBorderStep(DynamicPaintSurface *surface)
{
PaintSurfaceData *sData = surface->data;
- if (!sData->adj_data || !sData->adj_data->border)
+ if (!sData->adj_data || !sData->adj_data->border) {
return;
+ }
/* Don't use prevPoint, relying on the condition that neighbors are never border pixels. */
DynamicPaintEffectData data = {
@@ -5550,8 +5725,9 @@ static void dynamic_paint_wave_step_cb(void *__restrict userdata,
float force = 0.0f, avg_dist = 0.0f, avg_height = 0.0f, avg_n_height = 0.0f;
int numOfN = 0, numOfRN = 0;
- if (wPoint->state > 0)
+ if (wPoint->state > 0) {
return;
+ }
const int *n_index = sData->adj_data->n_index;
const int *n_target = sData->adj_data->n_target;
@@ -5563,8 +5739,9 @@ static void dynamic_paint_wave_step_cb(void *__restrict userdata,
float dist = bNeighs[n_idx].dist * wave_scale;
const PaintWavePoint *tPoint = &prevPoint[n_target[n_idx]];
- if (!dist || tPoint->state > 0)
+ if (!dist || tPoint->state > 0) {
continue;
+ }
CLAMP_MIN(dist, min_dist);
avg_dist += dist;
@@ -5590,8 +5767,9 @@ static void dynamic_paint_wave_step_cb(void *__restrict userdata,
/* else do wave eq */
else {
/* add force towards zero height based on average dist */
- if (avg_dist)
+ if (avg_dist) {
force += (0.0f - wPoint->height) * surface->wave_spring / (avg_dist * avg_dist) / 2.0f;
+ }
/* change point velocity */
wPoint->velocity += force * dt * wave_speed * wave_speed;
@@ -5604,10 +5782,12 @@ static void dynamic_paint_wave_step_cb(void *__restrict userdata,
if (wave_max_slope && avg_dist) {
const float max_offset = wave_max_slope * avg_dist;
const float offset = (numOfN) ? (avg_height / numOfN - wPoint->height) : 0.0f;
- if (offset > max_offset)
+ if (offset > max_offset) {
wPoint->height += offset - max_offset;
- else if (offset < -max_offset)
+ }
+ else if (offset < -max_offset) {
wPoint->height += offset + max_offset;
+ }
}
}
@@ -5637,8 +5817,9 @@ static void dynamicPaint_doWaveStep(DynamicPaintSurface *surface, float timescal
/* allocate memory */
PaintWavePoint *prevPoint = MEM_mallocN(sData->total_points * sizeof(PaintWavePoint), __func__);
- if (!prevPoint)
+ if (!prevPoint) {
return;
+ }
/* calculate average neigh distance (single thread) */
for (index = 0; index < sData->total_points; index++) {
@@ -5805,12 +5986,14 @@ static bool dynamicPaint_surfaceHasMoved(DynamicPaintSurface *surface, Object *o
int numOfVerts = mesh->totvert;
int i;
- if (!bData->prev_verts)
+ if (!bData->prev_verts) {
return true;
+ }
/* matrix comparison */
- if (!equals_m4m4(bData->prev_obmat, ob->obmat))
+ if (!equals_m4m4(bData->prev_obmat, ob->obmat)) {
return true;
+ }
/* vertices */
for (i = 0; i < numOfVerts; i++) {
@@ -5966,30 +6149,35 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface,
const bool surface_moved = dynamicPaint_surfaceHasMoved(surface, ob);
/* get previous speed for accelertaion */
- if (do_accel_data && bData->prev_velocity && bData->velocity)
+ if (do_accel_data && bData->prev_velocity && bData->velocity) {
memcpy(bData->prev_velocity, bData->velocity, sData->total_points * sizeof(Vec3f));
+ }
/* reset speed vectors */
- if (do_velocity_data && bData->velocity && (bData->clear || !surface_moved))
+ if (do_velocity_data && bData->velocity && (bData->clear || !surface_moved)) {
memset(bData->velocity, 0, sData->total_points * sizeof(Vec3f));
+ }
/* if previous data exists and mesh hasn't moved, no need to recalc */
- if (!surface_moved)
+ if (!surface_moved) {
return 1;
+ }
}
canvas_verts = (struct Vec3f *)MEM_mallocN(canvasNumOfVerts * sizeof(struct Vec3f),
"Dynamic Paint transformed canvas verts");
- if (!canvas_verts)
+ if (!canvas_verts) {
return 0;
+ }
/* allocate memory if required */
if (!bData) {
sData->bData = bData = (struct PaintBakeData *)MEM_callocN(sizeof(struct PaintBakeData),
"Dynamic Paint bake data");
if (!bData) {
- if (canvas_verts)
+ if (canvas_verts) {
MEM_freeN(canvas_verts);
+ }
return 0;
}
@@ -6007,16 +6195,21 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface,
/* if any allocation failed, free everything */
if (!bData->bNormal || !bData->s_pos || !bData->s_num || !bData->realCoord || !canvas_verts) {
- if (bData->bNormal)
+ if (bData->bNormal) {
MEM_freeN(bData->bNormal);
- if (bData->s_pos)
+ }
+ if (bData->s_pos) {
MEM_freeN(bData->s_pos);
- if (bData->s_num)
+ }
+ if (bData->s_num) {
MEM_freeN(bData->s_num);
- if (bData->realCoord)
+ }
+ if (bData->realCoord) {
MEM_freeN(bData->realCoord);
- if (canvas_verts)
+ }
+ if (canvas_verts) {
MEM_freeN(canvas_verts);
+ }
return setError(surface->canvas, N_("Not enough free memory"));
}
@@ -6032,8 +6225,9 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface,
bData->prev_velocity = (struct Vec3f *)MEM_mallocN(sData->total_points * sizeof(Vec3f),
"Dynamic Paint prev velocity");
/* copy previous vel */
- if (bData->prev_velocity && bData->velocity)
+ if (bData->prev_velocity && bData->velocity) {
memcpy(bData->prev_velocity, bData->velocity, sData->total_points * sizeof(Vec3f));
+ }
}
/*
@@ -6095,8 +6289,9 @@ static int dynamicPaint_doStep(Depsgraph *depsgraph,
const bool for_render = (DEG_get_mode(depsgraph) == DAG_EVAL_RENDER);
int ret = 1;
- if (sData->total_points < 1)
+ if (sData->total_points < 1) {
return 0;
+ }
if (dynamic_paint_surface_needs_dry_dissolve(surface)) {
DynamicPaintDissolveDryData data = {
@@ -6138,10 +6333,12 @@ static int dynamicPaint_doStep(Depsgraph *depsgraph,
bData->brush_velocity = MEM_callocN(sData->total_points * sizeof(float) * 4,
"Dynamic Paint brush velocity");
/* init adjacency data if not already */
- if (!sData->adj_data)
+ if (!sData->adj_data) {
dynamicPaint_initAdjacencyData(surface, true);
- if (!bData->bNeighs)
+ }
+ if (!bData->bNeighs) {
dynamicPaint_prepareAdjacencyData(surface, true);
+ }
}
/* update object data on this subframe */
@@ -6188,8 +6385,10 @@ static int dynamicPaint_doStep(Depsgraph *depsgraph,
/* process special brush effects, like smudge */
if (bData->brush_velocity) {
- if (surface->type == MOD_DPAINT_SURFACE_T_PAINT && brush->flags & MOD_DPAINT_DO_SMUDGE)
+ if (surface->type == MOD_DPAINT_SURFACE_T_PAINT &&
+ brush->flags & MOD_DPAINT_DO_SMUDGE) {
dynamicPaint_doSmudge(surface, brush, timescale);
+ }
MEM_freeN(bData->brush_velocity);
bData->brush_velocity = NULL;
}
@@ -6216,8 +6415,9 @@ static int dynamicPaint_doStep(Depsgraph *depsgraph,
/* Allocate memory for surface previous points to read unchanged values from */
prevPoint = MEM_mallocN(sData->total_points * sizeof(struct PaintPoint),
"PaintSurfaceDataCopy");
- if (!prevPoint)
+ if (!prevPoint) {
return setError(canvas, N_("Not enough free memory"));
+ }
/* Prepare effects and get number of required steps */
steps = dynamicPaint_prepareEffectStep(depsgraph, surface, scene, ob, &force, timescale);
@@ -6226,10 +6426,12 @@ static int dynamicPaint_doStep(Depsgraph *depsgraph,
}
/* Free temporary effect data */
- if (prevPoint)
+ if (prevPoint) {
MEM_freeN(prevPoint);
- if (force)
+ }
+ if (force) {
MEM_freeN(force);
+ }
}
/* paint island border pixels */
@@ -6267,8 +6469,9 @@ int dynamicPaint_calculateFrame(DynamicPaintSurface *surface,
for (st = 1; st <= surface->substeps; st++) {
float subframe = ((float)st) / (surface->substeps + 1);
- if (!dynamicPaint_doStep(depsgraph, scene, cObject, surface, timescale, subframe))
+ if (!dynamicPaint_doStep(depsgraph, scene, cObject, surface, timescale, subframe)) {
return 0;
+ }
}
}