Cleanup: Make PBVH iter mask not a pointer

After 97f2b01ea9, the iterator's mask data is just read only,
so there's no point in storing it as a pointer. This simplifies the code
using the mask data, since the default only needs to be handled once.
This commit is contained in:
Hans Goudey
2023-09-27 18:21:21 -04:00
parent f03a015049
commit 9e5cf73b4d
19 changed files with 94 additions and 114 deletions

View File

@@ -519,7 +519,7 @@ struct PBVHVertexIter {
float *co;
const float *no;
const float *fno;
const float *mask;
float mask;
bool visible;
};
@@ -548,7 +548,7 @@ void pbvh_vertex_iter_init(PBVH *pbvh, PBVHNode *node, PBVHVertexIter *vi, int m
if (vi.grid) { \
vi.co = CCG_elem_co(&vi.key, vi.grid); \
vi.fno = CCG_elem_no(&vi.key, vi.grid); \
vi.mask = vi.key.has_mask ? CCG_elem_mask(&vi.key, vi.grid) : NULL; \
vi.mask = vi.key.has_mask ? *CCG_elem_mask(&vi.key, vi.grid) : 0.0f; \
vi.grid = CCG_elem_next(&vi.key, vi.grid); \
vi.index++; \
vi.vertex.i++; \
@@ -567,9 +567,7 @@ void pbvh_vertex_iter_init(PBVH *pbvh, PBVHNode *node, PBVHVertexIter *vi, int m
vi.co = vi.vert_positions[vi.vert_indices[vi.gx]]; \
vi.no = vi.vert_normals[vi.vert_indices[vi.gx]]; \
vi.index = vi.vertex.i = vi.vert_indices[vi.i]; \
if (vi.vmask) { \
vi.mask = &vi.vmask[vi.index]; \
} \
vi.mask = vi.vmask ? vi.vmask[vi.index] : 0.0f; \
} \
else { \
if (!BLI_gsetIterator_done(&vi.bm_unique_verts)) { \
@@ -588,7 +586,7 @@ void pbvh_vertex_iter_init(PBVH *pbvh, PBVHNode *node, PBVHVertexIter *vi, int m
vi.fno = vi.bm_vert->no; \
vi.vertex = BKE_pbvh_make_vref((intptr_t)vi.bm_vert); \
vi.index = BM_elem_index_get(vi.bm_vert); \
vi.mask = (float *)BM_ELEM_CD_GET_VOID_P(vi.bm_vert, vi.cd_vert_mask_offset); \
vi.mask = BM_ELEM_CD_GET_FLOAT(vi.bm_vert, vi.cd_vert_mask_offset); \
}
#define BKE_pbvh_vertex_iter_end \

View File

@@ -1370,10 +1370,10 @@ static void node_update_mask_redraw(PBVH &pbvh, PBVHNode &node)
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin (&pbvh, &node, vd, PBVH_ITER_ALL) {
if (vd.mask && *vd.mask < 1.0f) {
if (vd.mask < 1.0f) {
has_unmasked = true;
}
if (vd.mask && *vd.mask > 0.0f) {
if (vd.mask > 0.0f) {
has_masked = false;
}
}
@@ -3114,7 +3114,7 @@ void pbvh_vertex_iter_init(PBVH *pbvh, PBVHNode *node, PBVHVertexIter *vi, int m
vi->grid_hidden = pbvh->grid_hidden;
}
vi->mask = nullptr;
vi->mask = 0.0f;
if (pbvh->header.type == PBVH_FACES) {
vi->vert_normals = pbvh->vert_normals;
vi->hide_vert = pbvh->hide_vert;

View File

@@ -119,7 +119,7 @@ static int mask_flood_fill_exec(bContext *C, wmOperator *op)
bool redraw = false;
PBVHVertexIter vi;
BKE_pbvh_vertex_iter_begin (pbvh, node, vi, PBVH_ITER_UNIQUE) {
float prevmask = *vi.mask;
float prevmask = vi.mask;
const float new_mask = mask_flood_fill_get_new_value_for_elem(prevmask, mode, value);
if (prevmask != new_mask) {
SCULPT_mask_vert_set(BKE_pbvh_type(ob->sculpt->pbvh), mask_write, new_mask, vi);
@@ -794,7 +794,7 @@ static void mask_gesture_apply_task(SculptGestureContext *sgcontext,
BKE_pbvh_vertex_iter_begin (sgcontext->ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (sculpt_gesture_is_vertex_effected(sgcontext, vd.vertex)) {
float prevmask = vd.mask ? *vd.mask : 0.0f;
float prevmask = vd.mask;
if (!any_masked) {
any_masked = true;
@@ -1503,7 +1503,7 @@ static void project_line_gesture_apply_task(SculptGestureContext *sgcontext, PBV
float disp[3];
sub_v3_v3v3(disp, projected_pos, vd.co);
const float mask = vd.mask ? *vd.mask : 0.0f;
const float mask = vd.mask;
mul_v3_fl(disp, 1.0f - mask);
if (is_zero_v3(disp)) {
continue;

View File

@@ -3316,16 +3316,8 @@ static void do_gravity_task(SculptSession *ss,
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
const float fade = SCULPT_brush_strength_factor(ss,
brush,
vd.co,
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.vertex,
thread_id,
nullptr);
const float fade = SCULPT_brush_strength_factor(
ss, brush, vd.co, sqrtf(test.dist), vd.no, vd.fno, vd.mask, vd.vertex, thread_id, nullptr);
mul_v3_v3fl(proxy[vd.i], offset, fade);

View File

@@ -684,7 +684,7 @@ static void do_boundary_brush_bend_task(Object *ob, const Brush *brush, PBVHNode
continue;
}
const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f;
const float mask = 1.0f - vd.mask;
const float automask = SCULPT_automasking_factor_get(
ss->cache->automasking, ss, vd.vertex, &automask_data);
float t_orig_co[3];
@@ -732,7 +732,7 @@ static void do_boundary_brush_slide_task(Object *ob, const Brush *brush, PBVHNod
continue;
}
const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f;
const float mask = 1.0f - vd.mask;
const float automask = SCULPT_automasking_factor_get(
ss->cache->automasking, ss, vd.vertex, &automask_data);
float *target_co = SCULPT_brush_deform_target_vertex_co_get(ss, brush->deform_target, &vd);
@@ -778,7 +778,7 @@ static void do_boundary_brush_inflate_task(Object *ob, const Brush *brush, PBVHN
continue;
}
const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f;
const float mask = 1.0f - vd.mask;
const float automask = SCULPT_automasking_factor_get(
ss->cache->automasking, ss, vd.vertex, &automask_data);
float *target_co = SCULPT_brush_deform_target_vertex_co_get(ss, brush->deform_target, &vd);
@@ -822,7 +822,7 @@ static void do_boundary_brush_grab_task(Object *ob, const Brush *brush, PBVHNode
continue;
}
const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f;
const float mask = 1.0f - vd.mask;
const float automask = SCULPT_automasking_factor_get(
ss->cache->automasking, ss, vd.vertex, &automask_data);
float *target_co = SCULPT_brush_deform_target_vertex_co_get(ss, brush->deform_target, &vd);
@@ -873,7 +873,7 @@ static void do_boundary_brush_twist_task(Object *ob, const Brush *brush, PBVHNod
continue;
}
const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f;
const float mask = 1.0f - vd.mask;
const float automask = SCULPT_automasking_factor_get(
ss->cache->automasking, ss, vd.vertex, &automask_data);
float t_orig_co[3];
@@ -933,7 +933,7 @@ static void do_boundary_brush_smooth_task(Object *ob, const Brush *brush, PBVHNo
}
float disp[3];
float avg[3];
const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f;
const float mask = 1.0f - vd.mask;
mul_v3_v3fl(avg, coord_accum, 1.0f / total_neighbors);
sub_v3_v3v3(disp, avg, vd.co);
float *target_co = SCULPT_brush_deform_target_vertex_co_get(ss, brush->deform_target, &vd);

View File

@@ -278,7 +278,7 @@ static void do_draw_brush_task(Object *ob, const Brush *brush, const float *offs
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data,
@@ -292,7 +292,7 @@ static void do_draw_brush_task(Object *ob, const Brush *brush, const float *offs
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -385,7 +385,7 @@ static void do_fill_brush_task(
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -478,7 +478,7 @@ static void do_scrape_brush_task(
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -594,7 +594,7 @@ static void do_clay_thumb_brush_task(Object *ob,
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -742,7 +742,7 @@ static void do_flatten_brush_task(
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -882,7 +882,7 @@ static void do_clay_brush_task(
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -1001,7 +1001,7 @@ static void do_clay_strips_brush_task(Object *ob,
ss->cache->radius * test.dist,
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -1147,7 +1147,7 @@ static void do_snake_hook_brush_task(Object *ob,
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -1194,9 +1194,7 @@ static void do_snake_hook_brush_task(Object *ob,
float disp[3];
BKE_kelvinlet_grab_triscale(disp, &params, vd.co, ss->cache->location, proxy[vd.i]);
mul_v3_fl(disp, bstrength * 20.0f);
if (vd.mask) {
mul_v3_fl(disp, 1.0f - *vd.mask);
}
mul_v3_fl(disp, 1.0f - vd.mask);
mul_v3_fl(
disp,
SCULPT_automasking_factor_get(ss->cache->automasking, ss, vd.vertex, &automask_data));
@@ -1277,7 +1275,7 @@ static void do_thumb_brush_task(Object *ob, const Brush *brush, const float *con
sqrtf(test.dist),
orig_data.no,
nullptr,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -1348,7 +1346,7 @@ static void do_rotate_brush_task(Object *ob, const Brush *brush, const float ang
sqrtf(test.dist),
orig_data.no,
nullptr,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -1416,7 +1414,7 @@ static void do_layer_brush_task(Object *ob, Sculpt *sd, const Brush *brush, PBVH
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -1442,13 +1440,8 @@ static void do_layer_brush_task(Object *ob, Sculpt *sd, const Brush *brush, PBVH
else {
(*disp_factor) += fade * bstrength * (1.05f - fabsf(*disp_factor));
}
if (vd.mask) {
const float clamp_mask = 1.0f - *vd.mask;
*disp_factor = clamp_f(*disp_factor, -clamp_mask, clamp_mask);
}
else {
*disp_factor = clamp_f(*disp_factor, -1.0f, 1.0f);
}
const float clamp_mask = 1.0f - vd.mask;
*disp_factor = clamp_f(*disp_factor, -clamp_mask, clamp_mask);
float final_co[3];
float normal[3];
@@ -1527,7 +1520,7 @@ static void do_inflate_brush_task(Object *ob, const Brush *brush, PBVHNode *node
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -1592,7 +1585,7 @@ static void do_nudge_brush_task(Object *ob, const Brush *brush, const float *con
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -1670,7 +1663,7 @@ static void do_crease_brush_task(Object *ob,
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -1782,7 +1775,7 @@ static void do_pinch_brush_task(Object *ob,
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -1897,7 +1890,7 @@ static void do_grab_brush_task(Object *ob,
sqrtf(test.dist),
orig_data.no,
nullptr,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -2012,9 +2005,7 @@ static void do_elastic_deform_brush_task(Object *ob,
break;
}
if (vd.mask) {
mul_v3_fl(final_disp, 1.0f - *vd.mask);
}
mul_v3_fl(final_disp, 1.0f - vd.mask);
mul_v3_fl(
final_disp,
@@ -2092,7 +2083,7 @@ static void do_draw_sharp_brush_task(Object *ob,
sqrtf(test.dist),
orig_data.no,
nullptr,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -2171,7 +2162,7 @@ static void do_topology_slide_task(Object *ob, const Brush *brush, PBVHNode *nod
sqrtf(test.dist),
orig_data.no,
nullptr,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -2331,7 +2322,7 @@ static void do_topology_relax_task(Object *ob, const Brush *brush, PBVHNode *nod
sqrtf(test.dist),
orig_data.no,
nullptr,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -2411,7 +2402,7 @@ static void do_displacement_eraser_brush_task(Object *ob, const Brush *brush, PB
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -2474,7 +2465,7 @@ static void do_displacement_smear_brush_task(Object *ob, const Brush *brush, PBV
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -2634,7 +2625,7 @@ static void do_topology_rake_bmesh_task(
sqrtf(test.dist),
vd.no,
vd.fno,
*vd.mask,
vd.mask,
vd.vertex,
thread_id,
&automask_data) *
@@ -2720,9 +2711,9 @@ static void do_mask_brush_draw_task(Object *ob,
thread_id,
&automask_data);
float mask = *vd.mask;
float mask = vd.mask;
if (bstrength > 0.0f) {
mask += fade * bstrength * (1.0f - *vd.mask);
mask += fade * bstrength * (1.0f - vd.mask);
}
else {
mask += fade * bstrength * mask;

View File

@@ -513,7 +513,7 @@ static void do_cloth_brush_apply_forces_task(Object *ob,
dist,
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -761,7 +761,7 @@ static void do_cloth_brush_solve_simulation_task(Object *ob,
sub_v3_v3v3(pos_diff, cloth_sim->pos[i], cloth_sim->prev_pos[i]);
mul_v3_fl(pos_diff, (1.0f - cloth_sim->damping) * sim_factor);
const float mask_v = (1.0f - (vd.mask ? *vd.mask : 0.0f)) *
const float mask_v = (1.0f - (vd.mask)) *
SCULPT_automasking_factor_get(automasking, ss, vd.vertex, &automask_data);
madd_v3_v3fl(cloth_sim->pos[i], pos_diff, mask_v);
@@ -1384,7 +1384,7 @@ static void cloth_filter_apply_forces_task(Object *ob,
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_automasking_node_update(ss, &automask_data, &vd);
float fade = vd.mask ? *vd.mask : 0.0f;
float fade = vd.mask;
fade *= SCULPT_automasking_factor_get(
ss->filter_cache->automasking, ss, vd.vertex, &automask_data);
fade = 1.0f - fade;

View File

@@ -1298,7 +1298,7 @@ static void sculpt_expand_mask_update_task(SculptSession *ss,
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_ALL) {
const float initial_mask = *vd.mask;
const float initial_mask = vd.mask;
const bool enabled = sculpt_expand_state_get(ss, expand_cache, vd.vertex);
if (expand_cache->check_islands &&
@@ -1387,7 +1387,7 @@ static void sculpt_expand_colors_update_task(SculptSession *ss, PBVHNode *node)
fade = 0.0f;
}
fade *= 1.0f - *vd.mask;
fade *= 1.0f - vd.mask;
fade = clamp_f(fade, 0.0f, 1.0f);
float final_color[4];

View File

@@ -156,7 +156,7 @@ static void do_draw_face_sets_brush_task(Object *ob, const Brush *brush, PBVHNod
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -177,7 +177,7 @@ static void do_draw_face_sets_brush_task(Object *ob, const Brush *brush, PBVHNod
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -235,7 +235,7 @@ static void do_relax_face_sets_brush_task(Object *ob,
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);

View File

@@ -94,7 +94,7 @@ static void color_filter_task(Object *ob,
float orig_color[3], final_color[4], hsv_color[3];
int hue;
float brightness, contrast, gain, delta, offset;
float fade = vd.mask ? *vd.mask : 0.0f;
float fade = vd.mask;
fade = 1.0f - fade;
fade *= filter_strength;
fade *= SCULPT_automasking_factor_get(

View File

@@ -83,7 +83,7 @@ static void mask_filter_task(SculptSession *ss,
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
float delta, gain, offset, max, min;
float mask = *vd.mask;
float mask = vd.mask;
SculptVertexNeighborIter ni;
switch (mode) {
case MASK_FILTER_SMOOTH:
@@ -144,7 +144,7 @@ static void mask_filter_task(SculptSession *ss,
break;
}
mask = clamp_f(mask, 0.0f, 1.0f);
if (mask != *vd.mask) {
if (mask != vd.mask) {
SCULPT_mask_vert_set(BKE_pbvh_type(ss->pbvh), mask_write, mask, vd);
update = true;
}

View File

@@ -372,7 +372,7 @@ static void mesh_filter_task(Object *ob,
SCULPT_automasking_node_update(ss, &automask_data, &vd);
float orig_co[3], val[3], avg[3], disp[3], disp2[3], transform[3][3], final_pos[3];
float fade = vd.mask ? *vd.mask : 0.0f;
float fade = vd.mask;
fade = 1.0f - fade;
fade *= filter_strength;
fade *= SCULPT_automasking_factor_get(
@@ -670,7 +670,7 @@ static void mesh_filter_surface_smooth_displace_task(Object *ob,
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_automasking_node_update(ss, &automask_data, &vd);
float fade = vd.mask ? *vd.mask : 0.0f;
float fade = vd.mask;
fade = 1.0f - fade;
fade *= filter_strength;
fade *= SCULPT_automasking_factor_get(

View File

@@ -77,7 +77,7 @@ static void calc_multiplane_scrape_surface_task(Object *ob,
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -172,7 +172,7 @@ static void do_multiplane_scrape_brush_task(Object *ob,
len_v3(local_co),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);

View File

@@ -744,7 +744,7 @@ static void do_mask_by_color_contiguous_update_node(Object *ob,
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
const float current_mask = *vd.mask;
const float current_mask = vd.mask;
const float new_mask = mask_by_color_floodfill[vd.index];
const float mask = sculpt_mask_by_color_final_mask_get(
current_mask, new_mask, invert, preserve_mask);
@@ -857,11 +857,11 @@ static void do_mask_by_color_task(Object *ob,
float col[4];
SCULPT_vertex_color_get(ss, vd.vertex, col);
const float current_mask = *vd.mask;
const float current_mask = vd.mask;
const float new_mask = sculpt_mask_by_color_delta_get(active_color, col, threshold, invert);
const float mask = sculpt_mask_by_color_final_mask_get(
current_mask, new_mask, invert, preserve_mask);
if (current_mask == *vd.mask) {
if (current_mask == vd.mask) {
continue;
}
@@ -1027,22 +1027,22 @@ static void sculpt_bake_cavity_exec_task(Object *ob,
mask = automask;
break;
case AUTOMASK_BAKE_MULTIPLY:
mask = *vd.mask * automask;
mask = vd.mask * automask;
break;
break;
case AUTOMASK_BAKE_DIVIDE:
mask = automask > 0.00001f ? *vd.mask / automask : 0.0f;
mask = automask > 0.00001f ? vd.mask / automask : 0.0f;
break;
break;
case AUTOMASK_BAKE_ADD:
mask = *vd.mask + automask;
mask = vd.mask + automask;
break;
case AUTOMASK_BAKE_SUBTRACT:
mask = *vd.mask - automask;
mask = vd.mask - automask;
break;
}
mask = *vd.mask + (mask - *vd.mask) * factor;
mask = vd.mask + (mask - vd.mask) * factor;
CLAMP(mask, 0.0f, 1.0f);
SCULPT_mask_vert_set(BKE_pbvh_type(ss->pbvh), mask_write, mask, vd);

View File

@@ -63,7 +63,7 @@ static void do_color_smooth_task(Object *ob, const Brush *brush, PBVHNode *node)
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -157,7 +157,7 @@ static void do_paint_brush_task(Object *ob,
distance_to_stroke_location,
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -367,7 +367,7 @@ static void do_smear_brush_task(Object *ob, const Brush *brush, PBVHNode *node)
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);

View File

@@ -176,7 +176,7 @@ static void do_pose_brush_task(Object *ob, const Brush *brush, PBVHNode *node)
mul_v3_fl(disp, segments[ik].weights[vd.index]);
/* Apply the vertex mask to the displacement. */
const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f;
const float mask = 1.0f - vd.mask;
const float automask = SCULPT_automasking_factor_get(
ss->cache->automasking, ss, vd.vertex, &automask_data);
mul_v3_fl(disp, mask * automask);

View File

@@ -210,7 +210,7 @@ static void do_enhance_details_brush_task(Object *ob,
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -285,21 +285,20 @@ static void do_smooth_brush_task(Object *ob,
SCULPT_automasking_node_update(ss, &automask_data, &vd);
const float fade = bstrength * SCULPT_brush_strength_factor(
ss,
brush,
vd.co,
sqrtf(test.dist),
vd.no,
vd.fno,
smooth_mask ? 0.0f : (vd.mask ? *vd.mask : 0.0f),
vd.vertex,
thread_id,
&automask_data);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
vd.co,
sqrtf(test.dist),
vd.no,
vd.fno,
smooth_mask ? 0.0f : vd.mask,
vd.vertex,
thread_id,
&automask_data);
if (smooth_mask) {
float val = SCULPT_neighbor_mask_average(ss, vd.vertex) - *vd.mask;
float val = SCULPT_neighbor_mask_average(ss, vd.vertex) - vd.mask;
val *= fade * bstrength;
float new_mask = *vd.mask + val;
float new_mask = vd.mask + val;
CLAMP(new_mask, 0.0f, 1.0f);
SCULPT_mask_vert_set(BKE_pbvh_type(ss->pbvh), mask_write, new_mask, vd);
@@ -455,7 +454,7 @@ static void do_surface_smooth_brush_laplacian_task(Object *ob, const Brush *brus
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);
@@ -499,7 +498,7 @@ static void do_surface_smooth_brush_displace_task(Object *ob, const Brush *brush
sqrtf(test.dist),
vd.no,
vd.fno,
vd.mask ? *vd.mask : 0.0f,
vd.mask,
vd.vertex,
thread_id,
&automask_data);

View File

@@ -151,7 +151,7 @@ static void sculpt_transform_task(Object *ob, const float transform_mats[8][4][4
SCULPT_orig_vert_data_update(&orig_data, &vd);
float *start_co;
float transformed_co[3], orig_co[3], disp[3];
float fade = vd.mask ? *vd.mask : 0.0f;
float fade = vd.mask;
copy_v3_v3(orig_co, orig_data.co);
char symm_area = SCULPT_get_vertex_symm_area(orig_co);
@@ -227,7 +227,7 @@ static void sculpt_elastic_transform_task(Object *ob,
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_orig_vert_data_update(&orig_data, &vd);
float transformed_co[3], orig_co[3], disp[3];
const float fade = vd.mask ? *vd.mask : 0.0f;
const float fade = vd.mask;
copy_v3_v3(orig_co, orig_data.co);
copy_v3_v3(transformed_co, vd.co);
@@ -428,7 +428,7 @@ static int sculpt_set_pivot_position_exec(bContext *C, wmOperator *op)
for (PBVHNode *node : nodes) {
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
const float mask = (vd.mask) ? *vd.mask : 0.0f;
const float mask = vd.mask;
if (mask < 1.0f) {
if (SCULPT_check_vertex_pivot_symmetry(vd.co, ss->pivot_pos, symm)) {
add_v3_v3(avg, vd.co);
@@ -446,7 +446,7 @@ static int sculpt_set_pivot_position_exec(bContext *C, wmOperator *op)
for (PBVHNode *node : nodes) {
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
const float mask = (vd.mask) ? *vd.mask : 0.0f;
const float mask = vd.mask;
if (mask < (0.5f + threshold) && mask > (0.5f - threshold)) {
if (SCULPT_check_vertex_pivot_symmetry(vd.co, ss->pivot_pos, symm)) {
add_v3_v3(avg, vd.co);

View File

@@ -1465,7 +1465,7 @@ static void sculpt_undo_store_mask(Object *ob, SculptUndoNode *unode)
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin (ss->pbvh, static_cast<PBVHNode *>(unode->node), vd, PBVH_ITER_ALL) {
unode->mask[vd.i] = *vd.mask;
unode->mask[vd.i] = vd.mask;
}
BKE_pbvh_vertex_iter_end;
}