Cleanup: Return sculpt node automasking data by value

This commit is contained in:
Hans Goudey
2023-12-08 13:09:06 -05:00
parent e5814ab201
commit 956d00e37a
15 changed files with 185 additions and 224 deletions

View File

@@ -2409,16 +2409,17 @@ static void sculpt_apply_texture(const SculptSession *ss,
}
}
float SCULPT_brush_strength_factor(SculptSession *ss,
const Brush *brush,
const float brush_point[3],
float len,
const float vno[3],
const float fno[3],
float mask,
const PBVHVertRef vertex,
int thread_id,
blender::ed::sculpt_paint::auto_mask::NodeData *automask_data)
float SCULPT_brush_strength_factor(
SculptSession *ss,
const Brush *brush,
const float brush_point[3],
float len,
const float vno[3],
const float fno[3],
float mask,
const PBVHVertRef vertex,
int thread_id,
const blender::ed::sculpt_paint::auto_mask::NodeData *automask_data)
{
using namespace blender::ed::sculpt_paint;
StrokeCache *cache = ss->cache;
@@ -2443,17 +2444,18 @@ float SCULPT_brush_strength_factor(SculptSession *ss,
return avg;
}
void SCULPT_brush_strength_color(SculptSession *ss,
const Brush *brush,
const float brush_point[3],
float len,
const float vno[3],
const float fno[3],
float mask,
const PBVHVertRef vertex,
int thread_id,
blender::ed::sculpt_paint::auto_mask::NodeData *automask_data,
float r_rgba[4])
void SCULPT_brush_strength_color(
SculptSession *ss,
const Brush *brush,
const float brush_point[3],
float len,
const float vno[3],
const float fno[3],
float mask,
const PBVHVertRef vertex,
int thread_id,
const blender::ed::sculpt_paint::auto_mask::NodeData *automask_data,
float r_rgba[4])
{
using namespace blender::ed::sculpt_paint;
StrokeCache *cache = ss->cache;
@@ -5979,31 +5981,29 @@ void SCULPT_fake_neighbors_free(Object *ob)
namespace blender::ed::sculpt_paint::auto_mask {
void node_begin(Object *ob,
auto_mask::Cache *automasking,
auto_mask::NodeData *automask_data,
PBVHNode *node)
NodeData node_begin(Object &object, const Cache *automasking, PBVHNode &node)
{
if (!automasking) {
memset(automask_data, 0, sizeof(*automask_data));
return;
return {};
}
automask_data->have_orig_data = automasking->settings.flags &
(BRUSH_AUTOMASKING_BRUSH_NORMAL | BRUSH_AUTOMASKING_VIEW_NORMAL);
NodeData automask_data;
automask_data.have_orig_data = automasking->settings.flags &
(BRUSH_AUTOMASKING_BRUSH_NORMAL | BRUSH_AUTOMASKING_VIEW_NORMAL);
if (automask_data->have_orig_data) {
SCULPT_orig_vert_data_init(&automask_data->orig_data, ob, node, undo::Type::Position);
if (automask_data.have_orig_data) {
SCULPT_orig_vert_data_init(&automask_data.orig_data, &object, &node, undo::Type::Position);
}
else {
memset(&automask_data->orig_data, 0, sizeof(automask_data->orig_data));
memset(&automask_data.orig_data, 0, sizeof(automask_data.orig_data));
}
return automask_data;
}
void node_update(auto_mask::NodeData *automask_data, PBVHVertexIter *vd)
void node_update(auto_mask::NodeData &automask_data, PBVHVertexIter &vd)
{
if (automask_data->have_orig_data) {
SCULPT_orig_vert_data_update(&automask_data->orig_data, vd);
if (automask_data.have_orig_data) {
SCULPT_orig_vert_data_update(&automask_data.orig_data, &vd);
}
}

View File

@@ -141,12 +141,12 @@ static float sculpt_automasking_normal_calc(SculptSession *ss,
float3 &normal,
float limit_lower,
float limit_upper,
NodeData *automask_data)
const NodeData &automask_data)
{
float3 normal_v;
if (automask_data->have_orig_data) {
normal_v = automask_data->orig_data.no;
if (automask_data.have_orig_data) {
normal_v = automask_data.orig_data.no;
}
else {
SCULPT_vertex_normal_get(ss, vertex, normal_v);
@@ -210,7 +210,7 @@ static bool SCULPT_automasking_needs_factors_cache(const Sculpt *sd, const Brush
static float automasking_brush_normal_factor(Cache *automasking,
SculptSession *ss,
PBVHVertRef vertex,
NodeData *automask_data)
const NodeData &automask_data)
{
float falloff = automasking->settings.start_normal_falloff * M_PI;
float3 initial_normal;
@@ -233,7 +233,7 @@ static float automasking_brush_normal_factor(Cache *automasking,
static float automasking_view_normal_factor(Cache *automasking,
SculptSession *ss,
PBVHVertRef vertex,
NodeData *automask_data)
const NodeData &automask_data)
{
float falloff = automasking->settings.view_normal_falloff * M_PI;
@@ -258,7 +258,7 @@ static float automasking_view_occlusion_factor(Cache *automasking,
SculptSession *ss,
PBVHVertRef vertex,
uchar stroke_id,
NodeData * /*automask_data*/)
const NodeData & /*automask_data*/)
{
char f = *(char *)SCULPT_vertex_attr_get(vertex, ss->attrs.automasking_occlusion);
@@ -513,7 +513,10 @@ static float sculpt_automasking_cavity_factor(Cache *automasking,
return factor;
}
float factor_get(Cache *automasking, SculptSession *ss, PBVHVertRef vert, NodeData *automask_data)
float factor_get(Cache *automasking,
SculptSession *ss,
PBVHVertRef vert,
const NodeData *automask_data)
{
if (!automasking || vert.i == PBVH_REF_NONE) {
return 1.0f;
@@ -526,7 +529,7 @@ float factor_get(Cache *automasking, SculptSession *ss, PBVHVertRef vert, NodeDa
if ((ss->cache || ss->filter_cache) &&
(automasking->settings.flags & BRUSH_AUTOMASKING_BRUSH_NORMAL))
{
mask *= automasking_brush_normal_factor(automasking, ss, vert, automask_data);
mask *= automasking_brush_normal_factor(automasking, ss, vert, *automask_data);
}
/* If the cache is initialized with valid info, use the cache. This is used when the
@@ -550,7 +553,7 @@ float factor_get(Cache *automasking, SculptSession *ss, PBVHVertRef vert, NodeDa
(BRUSH_AUTOMASKING_VIEW_OCCLUSION | BRUSH_AUTOMASKING_VIEW_NORMAL)) ==
(BRUSH_AUTOMASKING_VIEW_OCCLUSION | BRUSH_AUTOMASKING_VIEW_NORMAL);
if (do_occlusion &&
automasking_view_occlusion_factor(automasking, ss, vert, stroke_id, automask_data))
automasking_view_occlusion_factor(automasking, ss, vert, stroke_id, *automask_data))
{
return automasking_factor_end(ss, automasking, vert, 0.0f);
}
@@ -587,7 +590,7 @@ float factor_get(Cache *automasking, SculptSession *ss, PBVHVertRef vert, NodeDa
if ((ss->cache || ss->filter_cache) &&
(automasking->settings.flags & BRUSH_AUTOMASKING_VIEW_NORMAL))
{
mask *= automasking_view_normal_factor(automasking, ss, vert, automask_data);
mask *= automasking_view_normal_factor(automasking, ss, vert, *automask_data);
}
if (automasking->settings.flags & BRUSH_AUTOMASKING_CAVITY_ALL) {
@@ -780,10 +783,10 @@ static void sculpt_normal_occlusion_automasking_fill(Cache *automasking,
if (int(mode) & BRUSH_AUTOMASKING_VIEW_NORMAL) {
if (int(mode) & BRUSH_AUTOMASKING_VIEW_OCCLUSION) {
f *= automasking_view_occlusion_factor(automasking, ss, vertex, -1, &nodedata);
f *= automasking_view_occlusion_factor(automasking, ss, vertex, -1, nodedata);
}
f *= automasking_view_normal_factor(automasking, ss, vertex, &nodedata);
f *= automasking_view_normal_factor(automasking, ss, vertex, nodedata);
}
if (ss->attrs.automasking_stroke_id) {

View File

@@ -671,15 +671,14 @@ static void do_boundary_brush_bend_task(Object *ob, const Brush *brush, PBVHNode
angle_factor = floorf(angle_factor * 10) / 10.0f;
}
const float angle = angle_factor * M_PI;
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (boundary->edit_info[vd.index].propagation_steps_num == -1) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
SCULPT_orig_vert_data_update(&orig_data, &vd);
if (!SCULPT_check_vertex_pivot_symmetry(orig_data.co, boundary->initial_vertex_position, symm))
{
@@ -719,15 +718,14 @@ static void do_boundary_brush_slide_task(Object *ob, const Brush *brush, PBVHNod
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Position);
const float disp = sculpt_boundary_displacement_from_grab_delta_get(ss, boundary);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (boundary->edit_info[vd.index].propagation_steps_num == -1) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
SCULPT_orig_vert_data_update(&orig_data, &vd);
if (!SCULPT_check_vertex_pivot_symmetry(orig_data.co, boundary->initial_vertex_position, symm))
{
@@ -763,8 +761,7 @@ static void do_boundary_brush_inflate_task(Object *ob, const Brush *brush, PBVHN
PBVHVertexIter vd;
SculptOrigVertData orig_data;
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Position);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
const float disp = sculpt_boundary_displacement_from_grab_delta_get(ss, boundary);
@@ -773,7 +770,7 @@ static void do_boundary_brush_inflate_task(Object *ob, const Brush *brush, PBVHN
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
SCULPT_orig_vert_data_update(&orig_data, &vd);
if (!SCULPT_check_vertex_pivot_symmetry(orig_data.co, boundary->initial_vertex_position, symm))
{
@@ -809,15 +806,14 @@ static void do_boundary_brush_grab_task(Object *ob, const Brush *brush, PBVHNode
PBVHVertexIter vd;
SculptOrigVertData orig_data;
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Position);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (boundary->edit_info[vd.index].propagation_steps_num == -1) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
SCULPT_orig_vert_data_update(&orig_data, &vd);
if (!SCULPT_check_vertex_pivot_symmetry(orig_data.co, boundary->initial_vertex_position, symm))
{
@@ -852,8 +848,7 @@ static void do_boundary_brush_twist_task(Object *ob, const Brush *brush, PBVHNod
PBVHVertexIter vd;
SculptOrigVertData orig_data;
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Position);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
const float disp = strength * sculpt_boundary_displacement_from_grab_delta_get(ss, boundary);
float angle_factor = disp / ss->cache->radius;
@@ -868,7 +863,7 @@ static void do_boundary_brush_twist_task(Object *ob, const Brush *brush, PBVHNod
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
SCULPT_orig_vert_data_update(&orig_data, &vd);
if (!SCULPT_check_vertex_pivot_symmetry(orig_data.co, boundary->initial_vertex_position, symm))
{

View File

@@ -258,15 +258,14 @@ static void do_draw_brush_task(Object *ob, const Brush *brush, const float *offs
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
/* Offset vertex. */
if (ss->cache->brush->flag2 & BRUSH_USE_COLOR_AS_DISPLACEMENT &&
@@ -356,8 +355,7 @@ static void do_fill_brush_task(
plane_from_point_normal_v3(test.plane_tool, area_co, area_no);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
@@ -377,7 +375,7 @@ static void do_fill_brush_task(
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -448,8 +446,7 @@ static void do_scrape_brush_task(
const int thread_id = BLI_task_parallel_thread_id(nullptr);
plane_from_point_normal_v3(test.plane_tool, area_co, area_no);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
@@ -469,7 +466,7 @@ static void do_scrape_brush_task(
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -561,8 +558,7 @@ static void do_clay_thumb_brush_task(Object *ob,
/* Tilted plane (front part of the brush). */
plane_from_point_normal_v3(plane_tilt, area_co, normal_tilt);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
@@ -584,7 +580,7 @@ static void do_clay_thumb_brush_task(Object *ob,
interp_v3_v3v3(intr, intr, intr_tilt, tilt_mix);
sub_v3_v3v3(val, intr_tilt, vd.co);
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -716,8 +712,7 @@ static void do_flatten_brush_task(
plane_from_point_normal_v3(test.plane_tool, area_co, area_no);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
@@ -731,7 +726,7 @@ static void do_flatten_brush_task(
sub_v3_v3v3(val, intr, vd.co);
if (SCULPT_plane_trim(ss->cache, brush, val)) {
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -856,8 +851,7 @@ static void do_clay_brush_task(
plane_from_point_normal_v3(test.plane_tool, area_co, area_no);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
@@ -870,7 +864,7 @@ static void do_clay_brush_task(
sub_v3_v3v3(val, intr, vd.co);
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -966,8 +960,7 @@ static void do_clay_strips_brush_task(Object *ob,
plane_from_point_normal_v3(test.plane_tool, area_co, area_no_sp);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!SCULPT_brush_test_cube(&test, vd.co, mat, brush->tip_roundness, brush->tip_scale_x)) {
@@ -987,7 +980,7 @@ static void do_clay_strips_brush_task(Object *ob,
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
/* The normal from the vertices is ignored, it causes glitch with planes, see: #44390. */
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
@@ -1120,8 +1113,7 @@ static void do_snake_hook_brush_task(Object *ob,
KelvinletParams params;
BKE_kelvinlet_init_params(&params, ss->cache->radius, bstrength, 1.0f, 0.4f);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!do_elastic && !sculpt_brush_test_sq_fn(&test, vd.co)) {
@@ -1133,7 +1125,7 @@ static void do_snake_hook_brush_task(Object *ob,
fade = 1.0f;
}
else {
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -1250,8 +1242,7 @@ static void do_thumb_brush_task(Object *ob, const Brush *brush, const float *con
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_orig_vert_data_update(&orig_data, &vd);
@@ -1259,7 +1250,7 @@ static void do_thumb_brush_task(Object *ob, const Brush *brush, const float *con
if (!sculpt_brush_test_sq_fn(&test, orig_data.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -1318,8 +1309,7 @@ static void do_rotate_brush_task(Object *ob, const Brush *brush, const float ang
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_orig_vert_data_update(&orig_data, &vd);
@@ -1328,7 +1318,7 @@ static void do_rotate_brush_task(Object *ob, const Brush *brush, const float ang
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
float vec[3], rot[3][3];
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
@@ -1389,8 +1379,7 @@ static void do_layer_brush_task(Object *ob, Sculpt *sd, const Brush *brush, PBVH
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_orig_vert_data_update(&orig_data, &vd);
@@ -1398,7 +1387,7 @@ static void do_layer_brush_task(Object *ob, Sculpt *sd, const Brush *brush, PBVH
if (!sculpt_brush_test_sq_fn(&test, orig_data.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = SCULPT_brush_strength_factor(ss,
brush,
@@ -1496,14 +1485,13 @@ static void do_inflate_brush_task(Object *ob, const Brush *brush, PBVHNode *node
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -1560,14 +1548,13 @@ static void do_nudge_brush_task(Object *ob, const Brush *brush, const float *con
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -1636,15 +1623,14 @@ static void do_crease_brush_task(Object *ob,
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
/* Offset vertex. */
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = SCULPT_brush_strength_factor(ss,
brush,
@@ -1748,14 +1734,13 @@ static void do_pinch_brush_task(Object *ob,
copy_v3_v3(x_object_space, stroke_xz[0]);
copy_v3_v3(z_object_space, stroke_xz[1]);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -1860,8 +1845,7 @@ static void do_grab_brush_task(Object *ob,
const bool grab_silhouette = brush->flag2 & BRUSH_GRAB_SILHOUETTE;
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_orig_vert_data_update(&orig_data, &vd);
@@ -1869,7 +1853,7 @@ static void do_grab_brush_task(Object *ob,
if (!sculpt_brush_test_sq_fn(&test, orig_data.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -1938,8 +1922,7 @@ static void do_elastic_deform_brush_task(Object *ob,
const float bstrength = ss->cache->bstrength;
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Position);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
float dir;
if (ss->cache->mouse[0] > ss->cache->initial_mouse[0]) {
@@ -1963,7 +1946,7 @@ static void do_elastic_deform_brush_task(Object *ob,
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_orig_vert_data_update(&orig_data, &vd);
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
float final_disp[3];
switch (brush->elastic_deform_type) {
@@ -2050,8 +2033,7 @@ static void do_draw_sharp_brush_task(Object *ob,
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_orig_vert_data_update(&orig_data, &vd);
@@ -2059,7 +2041,7 @@ static void do_draw_sharp_brush_task(Object *ob,
continue;
}
/* Offset vertex. */
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = SCULPT_brush_strength_factor(ss,
brush,
@@ -2129,15 +2111,14 @@ static void do_topology_slide_task(Object *ob, const Brush *brush, PBVHNode *nod
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_orig_vert_data_update(&orig_data, &vd);
if (!sculpt_brush_test_sq_fn(&test, orig_data.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = SCULPT_brush_strength_factor(ss,
brush,
@@ -2297,15 +2278,14 @@ static void do_topology_relax_task(Object *ob, const Brush *brush, PBVHNode *nod
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_orig_vert_data_update(&orig_data, &vd);
if (!sculpt_brush_test_sq_fn(&test, orig_data.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = SCULPT_brush_strength_factor(ss,
brush,
@@ -2378,15 +2358,14 @@ static void do_displacement_eraser_brush_task(Object *ob, const Brush *brush, PB
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -2442,15 +2421,14 @@ static void do_displacement_smear_brush_task(Object *ob, const Brush *brush, PBV
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -2602,15 +2580,14 @@ static void do_topology_rake_bmesh_task(
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength *
SCULPT_brush_strength_factor(ss,
@@ -2686,15 +2663,14 @@ static void do_mask_brush_draw_task(Object *ob,
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = SCULPT_brush_strength_factor(ss,
brush,
vd.co,

View File

@@ -469,11 +469,11 @@ static void do_cloth_brush_apply_forces_task(Object *ob,
madd_v3_v3fl(gravity, ss->cache->gravity_direction, -sd->gravity_factor);
}
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, auto_mask::active_cache_get(ss), &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(
*ob, auto_mask::active_cache_get(ss), *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
float force[3];
float sim_location[3];
@@ -733,11 +733,10 @@ static void do_cloth_brush_solve_simulation_task(Object *ob,
}
auto_mask::Cache *automasking = auto_mask::active_cache_get(ss);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, auto_mask::active_cache_get(ss), &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
float sim_location[3];
cloth_brush_simulation_location_get(ss, brush, sim_location);
@@ -1366,12 +1365,12 @@ static void cloth_filter_apply_forces_task(Object *ob,
sculpt_gravity[2] = -1.0f;
}
mul_v3_fl(sculpt_gravity, sd->gravity_factor * filter_strength);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, auto_mask::active_cache_get(ss), &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(
*ob, auto_mask::active_cache_get(ss), *node);
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
float fade = vd.mask;
fade *= auto_mask::factor_get(ss->filter_cache->automasking, ss, vd.vertex, &automask_data);
@@ -1630,4 +1629,4 @@ void SCULPT_OT_cloth_filter(wmOperatorType *ot)
"Collide with other collider objects in the scene");
}
} // namespace ed::sculpt_paint::cloth
} // namespace blender::ed::sculpt_paint::cloth

View File

@@ -204,14 +204,14 @@ static void do_draw_face_sets_brush_faces(Object *ob,
SculptBrushTestFn sculpt_brush_test_sq_fn = SCULPT_brush_test_init_with_falloff_shape(
ss, &test, brush->falloff_shape);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(
*ob, ss->cache->automasking, *node);
bool changed = false;
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
for (const int face_i : ss->pmap[vd.index]) {
const IndexRange face = ss->faces[face_i];
@@ -270,14 +270,14 @@ static void do_draw_face_sets_brush_grids(Object *ob,
SculptBrushTestFn sculpt_brush_test_sq_fn = SCULPT_brush_test_init_with_falloff_shape(
ss, &test, brush->falloff_shape);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(
*ob, ss->cache->automasking, *node);
bool changed = false;
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
@@ -335,8 +335,7 @@ static void do_draw_face_sets_brush_bmesh(Object *ob,
* of the brush, as there is an explicit check there for the brushes which support dynamic
* topology. Do it locally here for the Draw Face Set brush here, to mimic the behavior of
* the other brushes but without marking the brush as supporting dynamic topology. */
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, nullptr, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, nullptr, *node);
bool changed = false;
@@ -363,7 +362,7 @@ static void do_draw_face_sets_brush_bmesh(Object *ob,
* the typical code flow for it here for the reference, and ease of looking at what needs
* to be done for such integration.
*
* auto_mask::node_update(&automask_data, &vd); */
* auto_mask::node_update(automask_data, vd); */
const float fade = bstrength *
SCULPT_brush_strength_factor(ss,
@@ -417,11 +416,10 @@ static void do_relax_face_sets_brush_task(Object *ob,
}
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;

View File

@@ -85,13 +85,13 @@ static void color_filter_task(Object *ob,
SculptOrigVertData orig_data;
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Color);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->filter_cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(
*ob, ss->filter_cache->automasking, *node);
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_orig_vert_data_update(&orig_data, &vd);
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
float orig_color[3], final_color[4], hsv_color[3];
int hue;

View File

@@ -355,13 +355,13 @@ static void mesh_filter_task(Object *ob,
/* This produces better results as the relax operation is no completely focused on the
* boundaries. */
const bool relax_face_sets = !(ss->filter_cache->iteration_count % 3 == 0);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->filter_cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(
*ob, ss->filter_cache->automasking, *node);
PBVHVertexIter vd;
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_orig_vert_data_update(&orig_data, &vd);
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(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;
@@ -655,11 +655,11 @@ static void mesh_filter_surface_smooth_displace_task(Object *ob,
SculptSession *ss = ob->sculpt;
PBVHVertexIter vd;
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->filter_cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(
*ob, ss->filter_cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
float fade = vd.mask;
fade = 1.0f - fade;

View File

@@ -1172,31 +1172,33 @@ void SCULPT_cube_tip_init(Sculpt *sd, Object *ob, Brush *brush, float mat[4][4])
/**
* Return a multiplier for brush strength on a particular vertex.
*/
float SCULPT_brush_strength_factor(SculptSession *ss,
const Brush *br,
const float point[3],
float len,
const float vno[3],
const float fno[3],
float mask,
const PBVHVertRef vertex,
int thread_id,
blender::ed::sculpt_paint::auto_mask::NodeData *automask_data);
float SCULPT_brush_strength_factor(
SculptSession *ss,
const Brush *br,
const float point[3],
float len,
const float vno[3],
const float fno[3],
float mask,
const PBVHVertRef vertex,
int thread_id,
const blender::ed::sculpt_paint::auto_mask::NodeData *automask_data);
/**
* Return a color of a brush texture on a particular vertex multiplied by active masks.
*/
void SCULPT_brush_strength_color(SculptSession *ss,
const Brush *brush,
const float brush_point[3],
float len,
const float vno[3],
const float fno[3],
float mask,
const PBVHVertRef vertex,
int thread_id,
blender::ed::sculpt_paint::auto_mask::NodeData *automask_data,
float r_rgba[4]);
void SCULPT_brush_strength_color(
SculptSession *ss,
const Brush *brush,
const float brush_point[3],
float len,
const float vno[3],
const float fno[3],
float mask,
const PBVHVertRef vertex,
int thread_id,
const blender::ed::sculpt_paint::auto_mask::NodeData *automask_data,
float r_rgba[4]);
/**
* Calculates the vertex offset for a single vertex depending on the brush setting rgb as vector
@@ -1326,15 +1328,15 @@ struct NodeData {
* Call before PBVH vertex iteration.
* \param automask_data: pointer to an uninitialized #auto_mask::NodeData struct.
*/
void node_begin(Object *ob, Cache *automasking, NodeData *automask_data, PBVHNode *node);
NodeData node_begin(Object &object, const Cache *automasking, PBVHNode &node);
/* Call before factor_get and SCULPT_brush_strength_factor. */
void node_update(NodeData *automask_data, PBVHVertexIter *vd);
void node_update(NodeData &automask_data, PBVHVertexIter &vd);
float factor_get(Cache *automasking,
SculptSession *ss,
PBVHVertRef vertex,
NodeData *automask_data);
const NodeData *automask_data);
/* Returns the automasking cache depending on the active tool. Used for code that can run both for
* brushes and filter. */

View File

@@ -61,8 +61,7 @@ static void calc_multiplane_scrape_surface_task(Object *ob,
test_radius *= brush->normal_radius_factor;
test.radius_squared = test_radius * test_radius;
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
@@ -74,7 +73,7 @@ static void calc_multiplane_scrape_surface_task(Object *ob,
copy_v3_v3(normal, vd.no ? vd.no : vd.fno);
mul_v3_m4v3(local_co, mat, vd.co);
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
/* Use the brush falloff to weight the sampled normals. */
const float fade = SCULPT_brush_strength_factor(ss,
@@ -122,8 +121,7 @@ static void do_multiplane_scrape_brush_task(Object *ob,
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
@@ -166,7 +164,7 @@ static void do_multiplane_scrape_brush_task(Object *ob,
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
/* Deform the local space along the Y axis to avoid artifacts on curved strokes. */
/* This produces a not round brush tip. */

View File

@@ -1029,11 +1029,10 @@ static void sculpt_bake_cavity_exec_task(Object *ob,
undo::push_node(ob, node, undo::Type::Mask);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
float automask = auto_mask::factor_get(automasking, ss, vd.vertex, &automask_data);
float mask;

View File

@@ -47,15 +47,14 @@ static void do_color_smooth_task(Object *ob, const Brush *brush, PBVHNode *node)
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -109,8 +108,7 @@ static void do_paint_brush_task(Object *ob,
IMB_colormanagement_srgb_to_scene_linear_v3(brush_color, brush_color);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
if (brush->flag & BRUSH_USE_GRADIENT) {
switch (brush->gradient_stroke_mode) {
@@ -149,7 +147,7 @@ static void do_paint_brush_task(Object *ob,
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -350,15 +348,14 @@ static void do_smear_brush_task(Object *ob, const Brush *brush, PBVHNode *node)
sub_v3_v3v3(brush_delta, ss->cache->location, ss->cache->last_location);
}
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,

View File

@@ -364,8 +364,7 @@ static void do_paint_pixels(void *__restrict userdata,
brush_color[3] = 1.0f;
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, data->nodes[n]);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
ImageUser image_user = *data->image_data.image_user;
bool pixels_updated = false;

View File

@@ -151,12 +151,11 @@ static void do_pose_brush_task(Object *ob, const Brush *brush, PBVHNode *node)
SculptOrigVertData orig_data;
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Position);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_orig_vert_data_update(&orig_data, &vd);
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
float total_disp[3];
zero_v3(total_disp);

View File

@@ -194,15 +194,14 @@ static void do_enhance_details_brush_task(Object *ob,
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -274,15 +273,14 @@ static void do_smooth_brush_task(Object *ob,
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -435,8 +433,7 @@ static void do_surface_smooth_brush_laplacian_task(Object *ob, const Brush *brus
const int thread_id = BLI_task_parallel_thread_id(nullptr);
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Position);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
SCULPT_orig_vert_data_update(&orig_data, &vd);
@@ -444,7 +441,7 @@ static void do_surface_smooth_brush_laplacian_task(Object *ob, const Brush *brus
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,
@@ -480,15 +477,14 @@ static void do_surface_smooth_brush_displace_task(Object *ob, const Brush *brush
SculptBrushTestFn sculpt_brush_test_sq_fn = SCULPT_brush_test_init_with_falloff_shape(
ss, &test, brush->falloff_shape);
const int thread_id = BLI_task_parallel_thread_id(nullptr);
auto_mask::NodeData automask_data;
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
continue;
}
auto_mask::node_update(&automask_data, &vd);
auto_mask::node_update(automask_data, vd);
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
brush,