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:
@@ -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 \
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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, ¶ms, 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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user